shared_from_this解决了什么问题

enable_shared_from_this 含义
如果一个T类型的对象t,是被std::shared_ptr管理的,且类型T继承自std::enable_shared_from_this,那么T就有个shared_from_this成员函数,这个函数返回一个新的std::shared_ptr的对象,也指向对象t

如果不这么做, 会出现什么问题,看下面一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
struct obj{
shared_ptr<obj> get_shr(){
shared_ptr<obj> ret(this);
return ret;
}
};

int main(){
shared_ptr<obj> smart_ptr(new obj);
obj& a=*smart_ptr;
shared_ptr<obj> b=a.get_shr(); //两个智能指针管理的是同一个对象,造成对象两次释放
return 0;
}

上述场景是 对象希望获得管理自己的智能指针,但是直接通过成员函数返回一个shared_ptr,造成了被管理对象的重复删除。