enable_shared_from_this

类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提供的功能是 允许派生类的对象 创建指向自己的shared_ptr实例, 并与现有的shared_ptr对象共享所有权. 如 std::enable_shared_from_this能让一个对象 temp (且被一个std::shared_ptr对象tempShared管理), 安全地生成其它额外的std::shared_ptr实例(如tempShared1, tempShared2,...), 它们与tempShared共享对象temp的所有权.

使用场合

当类A被shared_ptr管理, 且在类A的成员函数里需要把当前类对象作为参数传给其它函数时, 就需要传递一个指向自身的shared_ptr.

Why not this pointer?

使用智能指针的初衷是 为了方便资源管理, 如果在某些地方使用智能指针, 某些地方使用原始指针, 很容易破坏智能指针的语义, 从而产生各种错误.

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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容