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

转载于:https://www.cnblogs.com/kouchengkun/p/4307501.html

为什么要使用boost::enable_shared_from_thisT相关推荐

  1. Linux下安装 boost 库

    1. 先去官网下载压缩包: https://www.boost.org/ 2. 解压后cd 进入根目录,然后执行: ./bootstrap.sh 3. 安装(时间会很长): ./b2 install ...

  2. Mysql依赖库Boost的源码安装,linux下boost库的安装

    boost'准标准库'安装过程. 安装的是boost_1_60_0. (1)首先去下载最新的boost代码包,网址www.boost.org. (2)进入到自己的目录,解压: bzip2 -d boo ...

  3. 函数指针amp;绑定: boost::functoin/std::function/bind

    see link: https://isocpp.org/wiki/faq/pointers-to-members function vs template: http://stackoverflow ...

  4. Boost 1.53.0 发布,可移植的C++标准库

    Boost 1.53.0 发布了,包含了 5 个新的库,修复了一些安全漏洞以及 Boost.Locale 组件的 bug . 新增的 5 个库包括: Boost.Atomic Boost.Corout ...

  5. cmake开发环境 linux qt_一步步搭建CMake+QT+VTK+BOOST开发环境

    开发环境: 1.可以迅速处理大量并发网络数据包,ASIO库和winpcap 4.1.3库; 2.处理与显示点云模型数据,使用VTK 8.2.0库; 3.项目使用CMake+VC2017编译,GUI使用 ...

  6. boost::asio使用UDP协议通信源码实现

    说明:以下源码来自参考文献[1], 比原文更丰富, 更有指导意义, 方便日后参考. udp servr端源码 //g++ -g udp_server.cpp -o udp_server -lboost ...

  7. 使用boost解析域名服务

    下面的源码给出了使用boost::asio进行域名解析的方法. //g++ -g resolver_demo.cpp -o resolver_demo -lboost_system -lpthread ...

  8. boost::asio异步模式的C/S客户端源码实现

    异步模式的服务器源码 //g++ -g async_tcp_server.cpp -o async_tcp_server -lboost_system //#include <iostream& ...

  9. boost::asio中的C/S同步实例源码

    近来狂热地研究boost的开发技术,现将读书笔记整理如下: 需要说明的是, 本博该专题下面关于boost的源码是采用boost1.55版本, 运行在Ubuntu 14.04 64bit下面, 使用ap ...

最新文章

  1. win 下 安装 iphone 环境
  2. DALL·E才发布两天就被复现?官方论文还没出,大神们就在自制代码和视频了
  3. Redis进阶实践之二如何在Linux系统上安装安装Redis
  4. 有源则至清——我读《移山之道》
  5. Eclipse 安装Spring tool suite 解决官网下载jar文件无法安装/安装过程出错,及如何下载对应版本zip文件等问题,避坑
  6. linux ranger 文本模式,Ranger – 给命令行用户一个基于文本的文件管理器
  7. buildroot output子目录
  8. spark之4:编程指南
  9. 未来教育计算机二级书怎么样,未来教育计算机二级
  10. 集成运算放大电路实验报告_模电总结:第三章、集成运算放大电路
  11. Postman接口测试工具学习笔记(二)Postman进阶实践:获取天气预报实例
  12. mysql的安装以及开启远程访问
  13. visual设计的界面发布到iis上显示不一样_Material Design暗夜模式设计指南
  14. Android -- 写xml到SD卡中
  15. 张本伟:IT人如何收入500万?
  16. 威纶通触摸屏与西门子PLC200之间的无线通讯
  17. 江晓华:为火箭发射寻觅气象窗口
  18. base16、base32和base64转码原理
  19. mysql中single是什么意思_single是什么意思
  20. 单元一: 全桥驱动电路(驱动MOS/IGBT均适用,附带硬件)

热门文章

  1. 基于卷积神经网络的小麦病害识别方法
  2. seafile自建服务器,自建云盘系列——Seafile (支持分布式存储)
  3. python与Spark结合,PySpark的机器学习环境搭建和模型开发
  4. python发送html格式邮件,python 发送html格式邮件到qq(示例代码)
  5. python遥感影像分类代码_Python 实现遥感影像波段组合的示例代码
  6. python装饰器解析请求参数_我如何在装饰器中获得Flask可选的URL参数?
  7. 最好的python3视频教程_哪里有免费的python3教程啊?最好是有例子的视频教学
  8. 中国智能卡市场的新机会
  9. python中startout是什么意思_Python socket.timeout方法代碼示例
  10. 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...