簡體   English   中英

RAII對象tr1:shared_ptr

[英]RAII objects tr1:shared_ptr

我正在閱讀Scott Meyrses的C ++,並遇到以下代碼:

class Lock {
public:
explicit Lock(Mutex *pm) // init shared_ptr with the Mutex
    : mutexPtr(pm, unlock) // to point to and the unlock func
{
    lock(mutexPtr.get()); // see Item15 for info on “get”
}
private:
    std::tr1::shared_ptr<Mutex> mutexPtr; // use shared_ptr
}; // instead of raw pointer

他在一個腳注中說該代碼不是異常安全的。 因此,在他的博客中,他建議修改calss的構造函數,如下所示:

explicit Lock(Mutex *pm)
{
    lock(pm);
    mutexPtr.reset(pm, unlock);
}

尚不清楚為什么此代碼應起作用。 我們在尚未初始化的mutextPtr上調用reset方法(已從ctor-initializer中刪除了該條目)。 為什么我們不能得到謊言Segmenetation fault

mutexPtr尚未初始化。 當您將某些東西排除在初始值設定項列表之外時,將調用其默認構造函數(如果有)。 shared_ptr具有默認構造函數,該構造函數將保留的指針設置為null(即,不管理任何對象)。 reset呼叫然后將其設置為管理pm 什么都沒有刪除,因為什么也沒保留。 即使delete了呼吁舉行指針, delete上一個空指針是一個空操作,所以它不是一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM