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