类定义:
class ctest : public enable_shared_from_this
{
public:
ctest()
{
shared_from_this();
}
};
以下构造方式为例:
shared_ptr st(new ctest());
分为两部分执行:
1,先执行new ctest(),将ctest对象构造出来,此时enable_shared_from_this内的__M_weak_this是无效的,enable_shared_from_this在构造时不能对__M_weak_this进行有效的赋值
2,在执行shared_ptr的构造函数,将shared_ptr的对象构造出来,在构造函数内对__M_weak_this赋值
即在构造里面调用shared_from_this,__M_weak_this无效,导致异常