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.

questionAnswers(3)

yourAnswerToTheQuestion