std::shared_ptr
std::shared_ptr, eingeführt in C 11, bietet eine Möglichkeit, dynamisch zugewiesene Objekte mit gemeinsamem Besitz zu verwalten. Es ergab sich jedoch ein interessanter Anwendungsfall mit std::shared_ptr
Das Arbeitsbeispiel
Bedenken Sie den folgenden Codeausschnitt:
<code class="cpp">#include <memory> #include <vector> class Test { public: Test() { std::cout << "Test created" << std::endl; } ~Test() { std::cout << "Test destroyed" << std::endl; } }; int main() { std::vector<std::shared_ptr<void>> v; { v.push_back(std::shared_ptr<Test>(new Test())); } return 0; }</code>
Überraschenderweise gibt dieser Code Folgendes aus:
Test created Test destroyed
Dies deutet darauf hin, dass das Testobjekt ordnungsgemäß zerstört wurde, obwohl es von einem std::shared_ptr
Der zugrunde liegende Mechanismus
std::shared_ptr sorgt für die Typlöschung und trennt den Typ des verwalteten Objekts von der Implementierung. Intern speichert es eine Löschfunktion, die den entsprechenden Destruktor basierend auf dem Typ des ursprünglichen Objekts aufruft.
Wenn ein std::shared_ptr
Standardkonformität und -zuverlässigkeit
Das beschriebene Verhalten funktioniert zwar derzeit, hängt jedoch von Implementierungsdetails ab und ist es auch nicht durch den C-Standard gewährleistet. Dies hat zwei Gründe:
Daher ist die Verwendung von std::shared_ptr
Das obige ist der detaillierte Inhalt vonKann std::shared_ptr für eine zuverlässige Bereinigung beim Herunterfahren verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!