为什么要使用boost::enable_shared_from_this<T>

#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>的成员变量。具体是不是这样请参考源代码实现。

时间: 2024-08-03 07:04:07

为什么要使用boost::enable_shared_from_this<T>的相关文章

关于boost中enable_shared_from_this类的原理分析

首先要说明的一个问题是:如何安全地将this指针返回给调用者.一般来说,我们不能直接将this指针返回.想象这样的情况,该函数将this指针返回到外部某个变量保存,然后这个对象自身已经析构了,但外部变量并不知道,此时如果外部变量使用这个指针,就会使得程序崩溃. 使用智能指针shared_ptr看起来是个不错的解决方法.但问题是如何去使用它呢?我们来看如下代码: #include <iostream> #include <boost/shared_ptr.hpp> class Tes

10 C++ Boost ASIO网路通信库 TCP/UDP,HTTP

  tcp 同步服务器,显示服务器端时间 tcp 同步服务器,提供多种选择 多线程的tcp 同步服务器 tcp 同步客户端 boost 域名地址解析 tcp异步服务器 tcp 异步客户端 UDP同步服务器 UDP同步客户端 UDP异步服务器 UDP异步客户端 HTTP同步客户端 HTTP异步客户端 同步实验: 异步实验 多线程异步实验 tcp 同步服务器,显示服务器端时间 [email protected]:~/boost$ cat main.cpp  #include <ctime> #in

C/C++利用Boost::Asio网络库建立自己的Socket服务器

引言 寸光阴,当下我们或许更需要利用现有的知识,应用现有的技术.网络是当前互联网的根本,了解网络便开始显得极其重要.今天我们利用Boost库中Asio部分,浅尝网络服务器.此处不做过于深入的开展,为达成学习目的,只做简单的异步并发服务器. 注意:本篇代码没有直接引用boost等命名空间,为的是新入门Boost的同学能够更好的了解每个参数在boost的具体命名空间位置,有助于更好的理解boost的布局. 版权所有:_OE_,转载请注明出处:http://blog.csdn.net/csnd_ayo

Boost源码学习---weak_ptr.hpp

weak_ptr是辅助shared_ptr的智能指针.就像它的名字一样,是个"弱"指针:仅有几个接口,仅能完成很少工作.它可以从一个shared_ptr或weak_ptr对象构造,获取对资源的观测权,它是没有共享资源的,所以它的对象的创建不会引起指针引用计数的增加,它的对象的析构也不会引起计数器的减少. 它没有重载*和->,不能使用指针,主要的几个接口如下: long use_count() const//返回计数器数值 bool expired() const//判断指针是否失

boost 编写finger服务

本篇是模仿PYTHON TWISTED写一个FINGER示例. 从最简单的链接到通过接收字符串返回不同的内容 1 最简单的链接 1 #include <ctime> 2 #include <iostream> 3 #include <string> 4 #include <boost/bind.hpp> 5 #include <boost/shared_ptr.hpp> 6 #include <boost/enable_shared_fro

boost::share_ptr用法

boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 这其中,我最喜欢,使用最多的是shared_ptr,也最让人随心所欲. 使用很简单,如下: 头文件 <boost/shared_ptr.hpp> class A {   virtual void process(); } boost::shared_ptr<A> test(new A); boost::share

boost库----share_from_this类的作用和实现原理

使用boost库时,经常会看到如下的类 class A:public enable_share_from_this<A> 在什么情况下要使类A继承enable_share_from_this? 使用场合:当类A被share_ptr管理,且在类A的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr. 我们就使类A继承enable_share_from_this,然后通过其成员函数share_from_this()返回当指向自身的share_ptr. 以上

Boost.Asio技术文档

Christopher Kohlhoff Copyright ? 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_0.txt文件或从http://www.boost.org/LICENSE_1_0.txt) Boost.Asio是用于网络和低层IO编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模型. 综述 基本原理 应用程序与外界交互的方式有很多,可通过文件,网络,串口或控制台.例如在网络通信中,完

boost库share_from_this类的作用和实现原理

使用boost库时,经常会看到如下的类 class A:public enable_share_from_this<A> 在什么情况下要使类A继承enable_share_from_this? 使用场合 :当类A被share_ptr管理,且在类A的成员函数里需要把 当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr. 我们就使类A继承enable_share_from_this,然后通过其成员函数 share_from_this()返回当指向自身的share_ptr.