#include <boost/enable_shared_from_this.hpp>
class Test : public boost::enable_shared_from_this<Test>
{
// ......};boost::shared_ptr<Test> tt(new Test);
上面定义的Test类派生自boost::enable_shared_from_this<T>,获取Test类的shared_ptr的语句如上,和使用不派生自boost::enable_shared_from_this<T>的类的方式一样。那么为什么还要使用派生自boost::enable_shared_from_this<T>的类呢?
考虑以下情况,你如果你知道类Test的指针p,你怎么获得指向p的shared_ptr呢,没有办法。但是如果Test类派生自boost::enable_shared_from_this<T>,你可以通过以下语句获得指向p指向的对象的shared_ptr。
boost::shared_ptr<Test> t(p->shared_from_this());
除了以上说的优点以及继承后的类会比不继承的类额外占一些空间外,继承自boost::enable_shared_from_this<T>的类使用shared_ptr的方式和没有继承自boost::enable_shared_from_this<T>类的使用方式完全相同。
笔者没有看boost::enable_shared_from_this<T>的实现,猜测继承自该类的类,如本例子中的Test类,相当于多了一个类似boost::weak_ptr<Test>的成员变量。具体是不是这样请参考源代码实现。