類enable_shared_from_this
enable_shared_from_this 是個 模板類, 定義于頭文件<memory>, 原型為
template <class T> class enable_shared_from_this;
public member functions: shared_from_this
類enable_shared_from_this提供的功能是 允許派生類的對象 創(chuàng)建指向自己的shared_ptr實例, 并與現(xiàn)有的shared_ptr對象共享所有權. 如 std::enable_shared_from_this能讓一個對象 temp (且被一個std::shared_ptr對象tempShared管理), 安全地生成其它額外的std::shared_ptr實例(如tempShared1, tempShared2,...), 它們與tempShared共享對象temp的所有權.
使用場合
當類A被shared_ptr管理, 且在類A的成員函數(shù)里需要把當前類對象作為參數(shù)傳給其它函數(shù)時, 就需要傳遞一個指向自身的shared_ptr.
Why not this pointer?
使用智能指針的初衷是 為了方便資源管理, 如果在某些地方使用智能指針, 某些地方使用原始指針, 很容易破壞智能指針的語義, 從而產(chǎn)生各種錯誤.
Why not shared_ptr<this>?
例:
#include <memory>
#include
class BadShared
{
public:
std::shared_ptr<BadShared> getPtr()
{
return std::shared_ptr<BadShared>(this);
}
~BadShared()
{
std::cout<<"Destructor"<<std::endl;
}
};
intmain()
{
std::shared_ptr<BadShared> bp1(new BadShared());
std::shared_ptr bp2 = bp1->getPtr();
std::cout<<"bp1.use_count() = "<<bp1.use_count()<<std::endl;
std::cout<<"bp2.use_count() = "<<bp2.use_count()<<std::endl;
? ? return0;
}