История изменений
Исправление X512, (текущая версия) :
У вас объект - часть стекового фрейма и он удаляется вместе с удалением стекового фрейма при окончании функции (на самом деле ещё есть вложенные области видимости но не будем усложнять). Тоже самое будет с полем класса при удалении класса, у поля вызовется деструктор. Если нужно чтобы деструктор не вызывался, нужно использовать указатель и Myclass *xxx = new Myclass()
. В таком случае удалить объект и вызвать деструктор можно будет в любом указанном месте.
Даже если вы сделаете чтобы деструктор не вызывался (например с помощью placement new) стековая память всё равно будет удалена по окончанию функции и будет перезаписана при вызове другой функции, так что пользоваться переменной на стеке после окончания функции нельзя.
Я же сам не удалял объект через delete.
delete применим только для объектов на куче (то, что создано с помощью new
), а не для переменных на стековом фрейме или полей класса. Вы видимо путаете со скриптовыми языками вроде JavaScript или Python где всё является указателями и часто новые объекты создаются на куче без явного new
, например a = {};
.
★★★★
Неожиданный вопрос для четырёх звёзд.
Исходная версия X512, :
У вас объект - часть стекового фрейма и он удаляется вместе с удалением стекового фрейма при окончании функции (на самом деле ещё есть вложенные области видимости но не будем усложнять). Тоже самое будет с полем класса при удалении класса, у поля вызовется деструктор. Если нужно чтобы деструктор не вызывался, нужно использовать указатель и Myclass *xxx = new Myclass()
. В таком случае удалить объект и вызвать деструктор можно будет в любом указанном месте.
Даже если вы сделаете чтобы деструктор не вызывался (например с помощью placement new) стековая память всё равно будет удалена по окончанию функции и будет перезаписана при вызове другой функции, та что пользоваться переменной на стеке после окончания функции нельзя.
Я же сам не удалял объект через delete.
delete применим только для объектов на куче (то, что создано с помощью new
), а не для переменных на стековом фрейме или полей класса. Вы видимо путаете со скриптовыми языками вроде JavaScript или Python где всё является указателями и часто новые объекты создаются на куче без явного new
, например a = {};
.
★★★★
Неожиданный вопрос для четырёх звёзд.