Опасно ли использовать размещение 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);
}
Простой пример, приведенный выше, компилируется и запускается без ошибок, но я не могу сказать, запустив его, может ли он по какой-то причине взорваться в более сложной среде.