shared_ptr中高級應用

在編寫基於虛函數的多態代碼時,指針的類型轉換很有用,比如把一個基類的指針轉換成一個派生類的指針或者反過來。但是對於shared_ptr不能使用諸如static_cast<T*>(p.get())的形式,這樣會導致轉型後的指針無法再被shared_ptr正確管理。

爲了支持類似的用法,shared_ptr提供了類似的轉型函數,static_pointer_cast<T>()、dynamic_pointer_cast<T>()、const_pointer_cast<T>(),他們與標準的轉換操作符類似static_cast<T>,但返回的是轉型後的shared_ptr。

shared_ptr<void> 能夠存儲void*型的指針,而void*型指針可以指向任何任意類型,因此shared_ptr<void>就像一個泛型的指針容器,用於容納任何類型的能力。

enable_shared_from_this ,其他類繼承這個類,成員函數shared_from_this,返回this的shared_ptr。需要注意的是,不能對一個普通對象使用shared_from_this。

class self_shared:public
    std::enable_shared_from_this<self_shared>
{
};

auto sp = std::make_shared<self_shared>();
auto sp2 = sp->shared_from_this();
//sp.use_cuount==2

self_shared ss;
ss.shared_from_this //error

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章