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

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

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

#include <new>
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)

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