Wenn ich richtig verstehe, wenn ein shared_ptr (von boost, tr1, std, was auch immer) mit einem Zeiger auf ein frisch zugewiesenes Objekt initialisiert wird, weist der Konstruktor von shared_ptr eine kleine Menge an Speicher zu, um eine Referenzzählung für den Zeiger zu halten es schafft es. Was passiert, wenn diese Zuweisung fehlschlägt? Im folgenden Code:
%Vor% ... wird das my_class
-Objekt durchgesickert, wenn shared_ptr Speicher für seine Referenzzählung nicht zuordnen kann? Oder übernimmt der Konstruktor von shared_ptr die Verantwortung für das Löschen des Objekts?
Ihr Code wird das Objekt my_class
nicht verlieren, selbst wenn shared_ptr
keinen Speicher zuordnen konnte.
Gemäß dem C ++ 11 Standard (20.7.2.2.1), im shared_ptr
Konstruktor:
Wird ausgelöst: bad_alloc oder eine implementierungsdefinierte Ausnahme bei einer anderen Ressource als dem Speicher konnte nicht erhalten werden.
Ausnahmesicherheit: Wenn eine Ausnahme ausgelöst wird, wird delete p aufgerufen.
In der Konstruktorversion, die einen benutzerdefinierten Deleter verwendet, wird stattdessen der Deleter verwendet.
Boost-Dokumentation gibt dasselbe an.
Tags und Links c++ memory-management smart-pointers