Shared_Ptr-Implementierung ohne virtuellen Destruktor einer polymorphen Klasse
In der Debatte zwischen Armen Tsirunyan und Daniel Lidström über die Notwendigkeit virtueller Destruktoren für die Shared_ptr-Implementierung, Es ist tatsächlich möglich, einen shared_ptr zu entwerfen, der dies nicht erfordert Destruktoren.
Technische Implementierung
Der Schlüssel zu dieser Implementierung liegt in der Typlöschung. Shared_ptr verwaltet nicht nur Referenzzähler, sondern auch ein Löschobjekt, das im selben Speicherblock gespeichert ist. Der Typ dieses Löschers unterscheidet sich von dem von shared_ptr und ermöglicht so Flexibilität bei der Verwaltung von Objekten mit unterschiedlichen dynamischen Typen.
Ein Konstruktor mit Vorlagen wird eingeführt:
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
Beim Erstellen eines shared_ptr mit a Zeiger einer abgeleiteten Klasse (z. B. shared_ptr
C 11-Standardanforderungen
Der C 11-Standard definiert explizit die Anforderungen für diesen Konstruktor:
Für den Destruktor:
Somit verwendet die shared_ptr-Implementierung den Typ Löschen und verwaltet Löscher sorgfältig, um Objekte mit unterschiedlichen dynamischen Typen effektiv zu entsorgen, auch ohne dass virtuelle Destruktoren in polymorphen Klassen erforderlich sind.
Das obige ist der detaillierte Inhalt vonKann shared_ptr ohne virtuelle Destruktoren polymorpher Klassen funktionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!