Czy używanie nowego umieszczenia na starym obiekcie jest niebezpieczne, bez wcześniejszego jawnego wywołania destruktora?
Chciałbym odzyskać pamięć dla obiektu zamiast go zwalniać i odtwarzać. Czy następujące użycie bezpiecznego „umieszczania nowego” przy założeniuFoo
w praktyce nie zawiera wskaźników (ale może zawierać funkcje)?
Również jest ostatecznydelete
zadzwonić bezpiecznie i czy poprawnie wywoła destruktor na drugim „nowym” obiekcie i poprawnie zwolni pamięć?
#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);
}
Prosty przykład powyżej kompiluje się i działa bez błędów, ale nie mogę powiedzieć, uruchamiając go, czy może z jakiegoś powodu wybuchnąć w bardziej złożonym środowisku.