首頁 > 後端開發 > C++ > 在多型類別中,「shared_ptr」可以在沒有虛擬析構函數的情況下運作嗎?

在多型類別中,「shared_ptr」可以在沒有虛擬析構函數的情況下運作嗎?

Patricia Arquette
發布: 2024-12-06 06:44:12
原創
309 人瀏覽過

Can `shared_ptr` Work Without Virtual Destructors in Polymorphic Classes?

非多態共享指標:揭開秘密

Lidström 先生和Tsirunyan 先生之間的激烈爭論提出了一個基本問題:實現爭論shared_ptr而不需要多型虛擬析構函數是可行的上課嗎?

先生。 Lidström 的斷言 shared_ptr

但是,C 11 標準和 Boost 函式庫表明,這樣的實作確實是可能的。這項壯舉是透過「類型擦除」的概念來完成的:

template<class T>
class shared_ptr
{
public:
   ...
   template<class Y>
   explicit shared_ptr(Y* p);
   ...
};
登入後複製

在提供的範例中,shared_ptr

當參考計數降至零時,刪除器物件將了解呼叫派生類別的結構來處理分配的記憶體。

C 11 標準在以下要求中明確指定了此行為構造函數:

Requires: ... The expression delete p shall be well formed, shall have well defined behaviour and shall not throw exceptions.
Effects: Constructs a shared_ptr object that owns the pointer p.
登入後複製

這可以確保正確調用刪除器並安全地釋放內存,即使指針從Derived 轉換為Base 。

同樣,標準概述了析構函數行為:

Effects: ... Otherwise, if *this owns a pointer p, and delete p is called.
登入後複製

透過利用模板化建構函式和型別擦除,shared_ptr 可以避免對virtual 的需要多態性類別中的析構函數,為更廣泛的場景提供高效的記憶體管理。

以上是在多型類別中,「shared_ptr」可以在沒有虛擬析構函數的情況下運作嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板