Это продолжение этого вопроса. Предположим, у меня есть такой код:
class Class {
public virtual method()
{
this->~Class();
new( this ) Class();
}
};
Class* object = new Class();
object->method();
delete object;
что является упрощенной версией того, что предлагает этот ответ.
Теперь, когда деструктор вызывается из method()
, время жизни объекта заканчивается, и переменная указателя object
в вызывающем коде становится недействительной. Затем новый объект создается в том же месте.
Делает ли это снова действительным указатель на вызываемый объект?
Class
вызывает исключение, вы сталкиваетесь с этической дилеммой. (И пожалуйста не называйте свой класс Class ...) - person Kerrek SB   schedule 20.09.2012struct T {}; T * obj = new T; obj->~T(); new( obj ) T;
? - person Luc Touraille   schedule 20.09.2012Such use of explicit placement and destruction of objects can be necessary to cope with dedicated hardware resources and for writing memory management facilities.
- person Zdeslav Vojkovic   schedule 20.09.2012