




Да, это правильно. Но new не создает вещи в стеке, он создает их в куче.
Чтобы создать объект в стеке, вы должны:
object myObject(constr, params);
Нет другого способа создать объект в стеке, и как только он будет создан в стеке, вы не сможете «воссоздать» его с тем же именем позже в той же функции.
Исправление: вы МОЖЕТЕ воссоздать его в той же функции, если он находится в другом объеме. (void fun () {{int a;} {int a;}})
Да, это правильно, но он не будет размещаться в стеке. Вместо этого он будет размещен в куче. Если вы хотите выделить в стеке, объявите это так
object myObject(contr,params);
Если вы хотите, чтобы объект был в стеке, вам нужно сказать
object myObject(contr, params);
Как говорили другие, new создаст * myObject в куче. Для полноты я укажу, что указатель на объект с именем myObject (обратите внимание, что * отсутствует) действительно находится в стеке так, как вы его объявили. Поскольку переменные стека выходят из области видимости, когда вы покидаете функцию, вы должны удалить объект перед возвратом или передать указатель на другую переменную с более длительным временем жизни. Пренебрежение удалением объекта кучи, указатель которого находится в переменной стека, перед возвратом из функции - это своего рода сценарий канонической утечки памяти (хотя и далеко не единственный)
Этот код:
object *myObject;
myObject = new object(constr, params);
... законно и правильно. Но, пожалуйста, пожалуйста инициализируйте myObject чем-нибудь, когда вы его выделяете. Помните, что «myObject» сам по себе не является экземпляром «объекта», а является экземпляром указатель для «объекта». Итак, когда вы объявляете этот указатель следующим образом:
object *myObject;
... вы оставляете его неинициализированным. Вместо этого сделайте следующее:
object *myObject = 0;
myObject = new object(constr, params);
... и когда вы его удалите:
delete myObject;
myObject = 0;
Люди могут спорить о том, что вам следует установить значение NULL, а не 0, но оба варианта подходят для языка, и это в основном вопрос стиля и того, к чему привыкли ваши коллеги.
«Другого способа создать объект в стеке нет» - не совсем верно, но для новичка это, безусловно, единственный разумный способ :-)