在最近的一場辯論中,Daniel Lidström 斷言,shared_ptr
在沒有虛擬析構函數的情況下實作 Shared_Ptr
這個實作的關鍵在於型別擦除。 Shared_ptr 不僅僅儲存引用計數器;它包括一個處理物件銷毀的刪除器(作為資料結構的一部分儲存)。這個刪除器可以是任何類型,允許超出T(shared_ptr的模板類型)範圍的自訂。
衍生類別的客製化
建立shared_ptr時< ;基地>從 Derived 物件中,呼叫模板化建構函數,從而允許指定具體類型 Derived。建構函數會根據動態型別建立必要的刪除器,即使 Base 中沒有虛擬析構函數,也能確保正確的物件銷毀。
範例實作
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
上述建構子允許建立一個shared_ptr
C 11 標準要求
C 11 標準明確要求此行為:
以上是「shared_ptr」可以在「Base」中沒有虛擬析構函數的情況下管理「衍生」物件嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!