您好,欢迎访问一九零五行业门户网

boost::asio(2):shared

这就得从智能指针说起,智能指针就是利用一个变量的构造和析构函数来动态管理一个指针。 说白了就是:构造--new;析构--delete 我们可以很容易写一个智能指针: template class tclass tautoptr{public: tautoptr() { m_t = new t(); cout tautoptr::tautopt
这就得从智能指针说起,智能指针就是利用一个变量的构造和析构函数来动态管理一个指针。
说白了就是:构造-->new;析构-->delete
我们可以很容易写一个智能指针:
template class tautoptr{public: tautoptr() { m_t = new t(); cout 使用:int main(int argc, char** argv){ tautoptr tt; return 0;}
这没有问题,很ok。
boost::asio就提供了该方法,可以迅速让shared_ptr来管理你的类。
但是这样就导致了一个问题,当你的类派生之enable_shared_from_this的时候,无法在类成员函数里面使用shared_from_this()获取类指针。
如下的用法是错误:
class b { public:     b(): x_(4) {         cout p(this);         cout x_ x(new b);     x->f();     return 0; } 
输出为:b::b() 

b::~b() 
b::~b()
两次析构同一个对象,发生灾难性后果。
同样,如下的用法也是错误的:
class a : public enable_shared_from_this { public: a() { cout x_ p = shared_from_this(); //cout x_ f(); return 0;}
虽然我们已经将类a派生之enable_shared_from_this,但是我们使用的时候并没有用shared_ptr包装类a。也错误。
总结如下:
1. 将该类派生之enable_shared_from_this。例如:class a : public enable_shared_from_this
2. 使用的时候必须加上shared_ptr abc(new a())
其它类似信息

推荐信息