É 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.