C++ 获取一个shared_ptr引用这个
示例
enable_shared_from_this使您可以获取的有效shared_ptr实例this。
通过从类模板派生类enable_shared_from_this,您继承了一个shared_from_this将shared_ptr实例返回的方法this。
请注意,必须首先将对象创建为shared_ptr:
#include <memory>
class A: public enable_shared_from_this<A> {
};
A* ap1 =new A();
shared_ptr<A> ap2(ap1); //首先准备指向该对象的共享指针并保持它!
//然后从对象本身获取指向该对象的共享指针
shared_ptr<A> ap3 = ap1->shared_from_this();
int c3 =ap3.use_count(); //=2:指向同一对象注意(2)您不能enable_shared_from_this在构造函数内部调用。
#include <memory> //enable_shared_from_this
class Widget : public std::enable_shared_from_this< Widget >
{
public:
void DoSomething()
{
std::shared_ptr< Widget > self = shared_from_this();
someEvent -> Register( self );
}
private:
...
};
int main()
{
...
auto w = std::make_shared< Widget >();
w -> DoSomething();
...
}如果shared_from_this()在非拥有的对象上使用shared_ptr,例如本地自动对象或全局对象,则行为是不确定的。从C++17开始,它抛出std::bad_alloc。
使用shared_from_this()从构造函数等同于使用它不是由拥有的对象shared_ptr,因为对象是由拥有shared_ptr构造函数返回后。
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短