知识卡片
从自身取得共享所有权
内容
enable_shared_from_this 使对象能通过 shared_from_this 复用既有控制块来取得共享句柄,而不是用 this 新建控制块。前提是对象已被正确的共享拥有者管理;仅继承基类不会凭空建立拥有关系,构造期间不能假定该前提成立。
参考来源
- 位置:《Effective Modern C++》第4章《智能指针》,条款十九:对于共享资源使用 std::shared_ptr(源文件:_epub-src/EPUB/text/ch005.xhtml)
- 结论依据:原文说明shared_from_this查找已有控制块,且调用前必须已有shared_ptr管理对象。
- 原始内容:从内部来说, shared_from_this 查找当前对象控制块,然后创建一个新的 std::shared_ptr 关联这个控制块。设计的依据是当前对象已经存在一个关联的控制块。要想符合设计依据的情况,必须已经存在一个指向当前对象的 std::shared_ptr (比如调用 shared_from_this 的成员函数外面已经存在一个 std::shared_ptr )。如果没有 std::shared_ptr 指向当前对象(即当前…