boost::share_ptr用法

简介: boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 这其中,我最喜欢,使用最多的是shared_ptr,也最让人随心所欲. 使用很简单,如下: 头文件  class A {   virtual void process(); } boost::shared_ptr test(new A); boost::shared_ptr通过重载->(返回传入的指针),test的使用就如同一个指针。

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::shared_ptr通过重载->(返回传入的指针),test的使用就如同一个指针。其实test是一个对象。 
当发生引用时,boost::shared_ptr<A> test1 = test; test1与test共享构造的A指针,引用计算加一。当析够发生时,计算器减一,当计数器为0,删除内嵌指针。 

常用的boost::shared_ptr函数有: 
get() 获取裸指针 
reset() 计数器减一 

另外,boost::shared_ptr可以方便的和std::vector配合,除了不用担心节点的野指针等问题,还有一个比较有意思的功能。 
class B : public A 

virtual void process(); 
void do(); 

std::vector< boost::shared_ptr<A> > vect; 
boost::shared_ptr<B> node = boost::shared_ptr<B>(new B); 
vect.push_back(node); 
vect[0]->do(); //可以很方便的访问B::do(),要知道do()并不是A的方法。 
boost::shared_ptr有个一个缺点,就是不能从this指针构造。在boost库中,提供了一个解决方案。 
#include <boost/enable_shared_from_this.hpp> 
class C: public boost::enable_shared_from_this<C> // 


这个情况出现在什么时候呢,如: 
class D 

public: 
void Go(boost::shared_ptr<C> &d); 

而D的Go方法在C中被使用,这个时候,就需要从this指针构造C的智能指针(boost::shared_from_this()方法提供)。当然,这种方法有一个前提,那就是C在外部的形态也是智能指针。 

最后,对所有智能指针做一下简单的介绍吧。 
auto_ptr 标准库中的智能指针。但是会转移所有权,如a = b时;内嵌的指针转移到b,智能指针a访问内嵌的指针则为空。 
scoped_ptr 与auto_ptr类似,但是不允许复制; 
intrusive_ptr是shared_ptr侵入式版本。使用情况,内部以及编写好了自己的内部引用计算器的代码,而又没有时间重写它。intrusive_ptr可以从this构造。 
weak_ptr是智能指针shared_ptr的观察者。

目录
相关文章
|
12月前
|
Linux 网络安全 虚拟化
阿里云开发者分享VMware17 Pro保姆级安装秘籍,详细步骤助你轻松搞定安装!
这是一篇超详细的VMware 17 Pro虚拟机下载与安装教程。VMware 17 Pro支持多操作系统模拟运行,适合开发、测试及教育使用。文章涵盖从下载到安装的全流程,包括解压安装包、接受协议、配置安装路径等步骤,并提供虚拟机优化(如安装VMware Tools、配置快照和共享文件夹)及使用指南。同时,针对常见问题如虚拟化未启用或软件阻止启动,提供了具体解决方案,帮助用户顺利部署和使用虚拟机环境。
6650 36
阿里云开发者分享VMware17 Pro保姆级安装秘籍,详细步骤助你轻松搞定安装!
|
云安全 安全 Cloud Native
一文了解什么是CNAPP
在云计算蓬勃发展的今天,企业面临的安全挑战愈发复杂。传统安全方案已力不逮,CNAPP(云原生应用保护平台)应运而生,革新云安全领域。CNAPP专为云环境设计,提供全生命周期安全保护,具备微隔离、访问控制、数据保护等功能,并利用自动化与AI技术简化管理、智能响应威胁,适用于多云、DevOps等多种场景。尽管存在技术复杂性和成本等挑战,CNAPP仍将持续进化,变得更加智能、自动且易于集成,助力企业构建稳健的云安全体系。
1124 0
|
传感器 编解码 算法
Open3D Surface reconstruction 表面重建
Open3D Surface reconstruction 表面重建
880 4
|
数据采集 网络协议 API
Python网络编程库介绍
【4月更文挑战第3天】Python的网络编程库包括socket、requests、urllib、paramiko、Twisted和asyncio。socket提供底层套接字编程,requests简化HTTP请求,urllib处理简单HTTP任务。paramiko支持SSHv2协议,适用于远程管理。Twisted是事件驱动的网络引擎,适合高性能应用。asyncio是Python 3.4+的异步IO库,用于编写并发代码。开发者应根据需求选择合适的库,考虑版本兼容性、文档和社区支持。
|
数据库 开发者 Python
Python后端开发入门指南:从零开始,用Flask打造你的第一个Web应用!
【8月更文挑战第21天】Python凭借简洁的语法和丰富的库支持,在后端开发中备受青睐。本指南通过Flask框架介绍Python后端开发的基础步骤。首先安装Flask (`pip install flask`),接着创建应用实例及路由,如定义根路由`/`显示&quot;Hello, World!&quot;。为处理复杂逻辑如数据库操作,可使用Flask-SQLAlchemy扩展,安装后(`pip install flask-sqlalchemy`)配置数据库并定义模型。这些基本步骤为初学者提供了实用的起点,帮助快速上手Python后端开发。
1825 0
|
安全 Windows
Windows环境变量(用户变量、系统变量)的设置
本文介绍在Windows 10操作系统中进行用户变量、系统变量等两种环境变量的新建、修改与删除方法~
3635 1
Windows环境变量(用户变量、系统变量)的设置
|
机器学习/深度学习 开发工具
通过VISO来绘制神经网络图模型
通过VISO来绘制神经网络图模型
|
缓存 Shell PyTorch
huggingface.transformers安装教程
本部分介绍transformers包如何安装,安装后如何检验是否安装成功,以及cache的设置和离线模式如何操作。
|
关系型数据库 MySQL 数据库
【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)
本文以MySQL数据库为例,其他数据类似。 官方文档和下载 ODB官方首页    官方开发者说明书(开发教程) 安装下载首页(下载与安装教程Windows/Linux) Windows安装步骤(都是英文版,流程虽然详细,但是却略显麻烦,主要是因为ODB的机制造成的) ODB的使用原理 下...
4151 0
|
2天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)

热门文章

最新文章