Ist es gefährlich, ein altes Objekt neu zu platzieren, ohne zuerst den Destruktor aufzurufen?

Ich möchte das Gedächtnis für ein Objekt wiederverwenden, anstatt es freizugeben und zu rekonstruieren. Ist die folgende Verwendung von "placement new" sicher, vorausgesetzt, dassFoo In der Praxis enthält keine Zeiger (aber möglicherweise Funktionen)?

Auch ist das Finaledelete Rufen Sie safe auf, und wird der Destruktor für das zweite "neue" Objekt korrekt aufgerufen und anschließend der Speicher korrekt freigegeben?

#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);
}

Das obige einfache Beispiel wird ohne Fehler kompiliert und ausgeführt, aber ich kann nicht durch Ausführen feststellen, ob es aus irgendeinem Grund in einer komplexeren Umgebung explodieren könnte.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage