É perigoso usar o posicionamento novo em um objeto antigo sem chamar explicitamente o destruidor primeiro?

Eu gostaria de reciclar a memória para um objeto em vez de desalocá-lo e reconstruí-lo. O seguinte uso de "novo posicionamento" é seguro, supondo queFoo na prática não contém ponteiros (mas pode conter funções)?

Além disso, é a finaldelete chamar seguro, e ele irá corretamente chamar o destrutor no segundo "novo" objeto e corretamente liberar a memória depois?

#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);
}

O exemplo simples acima compila e executa sem erros, mas não posso dizer, executando-o, se ele pode explodir por algum motivo em um ambiente mais complexo.

questionAnswers(3)

yourAnswerToTheQuestion