沒有多態類虛擬析構函數的Shared_Ptr 實作
Armen Tsirunyan 和Daniel Lidström 關於share_ptr 實現的虛擬析函數的必要構樣在性的爭論中,確實可以設計一個不需要這樣的shared_ptr
技術實作
這個實作的關鍵在於類型擦除。 Shared_ptr 不僅管理引用計數器,還管理儲存在相同記憶體區塊中的刪除器物件。此刪除器的類型與shared_ptr的類型不同,允許靈活地管理具有不同動態類型的物件。
引入了模板化建構子:
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
當使用a構造shared_ptr時派生類別的指標(例如,shared_ptr
C 11 標準要求
C 11 標準明確定義了此構造函數的要求:
對於析構函數:
因此,shared_ptr 實作利用型別擦除並仔細管理刪除器以有效地處置具有不同動態類型的對象,即使不需要多型類中的虛擬析構函數。
以上是在沒有多型類別虛擬析構函數的情況下,shared_ptr 可以運作嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!