¿Es peligroso usar una ubicación nueva en un objeto antiguo sin llamar explícitamente al destructor primero?
Me gustaría reciclar la memoria de un objeto en lugar de desasignarlo y reconstruirlo. ¿Es seguro el siguiente uso de "colocación nueva", suponiendo queFoo
en la práctica no contiene punteros (pero puede contener funciones)?
Además, es la final.delete
llame seguro, y ¿llamará correctamente al destructor en el segundo "nuevo" objeto, y luego liberará correctamente la memoria?
#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);
}
El ejemplo simple anterior compila y ejecuta sin errores, pero no puedo decir si lo ejecuto por algún motivo en un entorno más complejo.