简单来说就是,继承自std::enable_shared_from_this<T>的类能够在其自身实例中通过std::shared_from_this方法创建一个指向自己的std::shared_ptr<T>智能指针。 想要理解std::enable_shared_from_this<T>,首先得知道为什么需要std::enable_shared_from_this<T>,请看下文。 使用"std::enable_shared_from_this"...
继承自 std::enable_shared_from_this<T> 的类能够在其自身实例中通过 std::shared_from_this 方法创建一个指向自己的 std::shared_ptr<T> 智能指针。 从一个裸指针创建多个 std::shared_ptr<T> 实例会造成严重的后果,其行为是未定义的。 std::enable_shared_from_this<T> 实际包含了一个用于指向对象自...
CRTP)实现的一个模板类。在日常开发中,我们可以继承 std::enable_shared_from_this进而拿到 this指针...
一、std::enable_shared_from_this的作用 按照enable_shared_from_this - C++ Reference (cplusplus.com)文档介绍:继承std::enable_shared_from_this的子类,可以使用shared_from_this成员函数获取自身的shared_ptr指针;该类提供了允许继承类的对象创建指向自身实例的shared_ptr,并且与存在shared_ptr对象共享所有权。什...
便于访问对象本身:在对象的成员函数中,可以方便地获取对象自身的 std::shared_ptr,而不仅仅是一个裸指针。 1.1.2 用法 要使用 shared_from_this,你的类需要公开继承自 std::enable_shared_from_this。下面是一个简单的例子: #include <iostream> #include <memory> class MyClass : public std::enable_shared...
shared_from_this<T>作为基类来继承(其中T为智能指针持有的类型),使得派生类拥有可以从this指针安全...
这就是std::enable_shared_from_this<T>发挥作用的地方。公开继承std::enable_shared_from_this的类可以通过调用方法shared_from_this()获得指向自己的shared_ptr。以下是它的一个基本示例: 代码语言:javascript 复制 #include<memory>struct Foo:std::enable_shared_from_this<Foo>{std::shared_ptr<Foo>getSelf...
std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt 共享对象 t 的所有权。 若一个类 T 继承 std::enable_shared_from_this<T> ,则会为该类 T 提供成员...
std::enable_shared_from_this 能让它的一个已被 std::shared_ptr 类型对象 pt 管理的对象 t 安全地生成其他额外的 std::shared_ptr 实例pt1、pt2 等等,它们都与 pt 共享对象 t 的所有权。 如果类 T 公开继承了 std::enable_shared_from_this<T>,那么就会为该类 T 提供成员函数 shared_from_this。
发现没,程序执行异常crash了。还记得吗,对于继承了enable_shared_from_this的对象,不能在析构函数中使用对象,上面情况是不是命中了这个禁忌? 针对这个问题,weak_ptr能提供一个很好的解决方案,关于weak_ptr后面会专门介绍,使用weak_ptr方案的代码如下 #include<iostream>#include<memory>#include<unistd.h>#include<...