Опасно ли использовать размещение new на старом объекте без явного вызова деструктора первым?

Я хотел бы переработать память для объекта, а не освобождать и реконструировать его. Является ли следующее использование "размещение нового " безопасно, предполагая, чтоFoo на практике не содержит указателей (но может содержать функции)?

Кроме того, является окончательнымdelete вызовите безопасный, и он будет правильно вызывать деструктор на второмновый» объект, и правильно ли освободить память потом?

#include 
struct Foo {
    int hello;
    int world;
};

int main() {
    Foo* foo = new Foo;
    // Do something with foo
    // Done with foo, writing a new version of foo on top of the old one.
    new(foo) Foo();

    delete(foo);
}

Простой пример, приведенный выше, компилируется и запускается без ошибок, но я не могу сказать, запустив его, может ли он по какой-то причине взорваться в более сложной среде.

Ответы на вопрос(3)

Ваш ответ на вопрос