Boost智能指针——scoped_ptr
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:
#include<string> class implementation void test() void main() |
该代码的输出结果是:
Test Begin ... |
可以看到:当implementation类离其开impl作用域的时候,会被自动删除,这样就会避免由于忘记手动调用delete而造成内存泄漏了。
boost::scoped_ptr特点:
boost::scoped_ptr的实现和std::auto_ptr非常类似,都是利用了一个栈上的对象去管理一个堆上的对象,从而使得堆上的对象随着栈上的对象销毁时自动删除。不同的是,boost::scoped_ptr有着更严格的使用限制——不能拷贝。这就意味着:boost::scoped_ptr指针是不能转换其所有权的。
- 不能转换所有权
boost::scoped_ptr所管理的对象生命周期仅仅局限于一个区间(该指针所在的"{}"之间),无法传到区间之外,这就意味着boost::scoped_ptr对象是不能作为函数的返回值的(std::auto_ptr可以)。 - 不能共享所有权
这点和std::auto_ptr类似。这个特点一方面使得该指针简单易用。另一方面也造成了功能的薄弱——不能用于stl的容器中。 - 不能用于管理数组对象
由于boost::scoped_ptr是通过delete来删除所管理对象的,而数组对象必须通过deletep[]来删除,因此boost::scoped_ptr是不能管理数组对象的,如果要管理数组对象需要使用boost::scoped_array类。
boost::scoped_ptr的常用操作:
可以简化为如下形式:
namespace boost { template<typename T> class scoped_ptr : noncopyable { void reset(T* p = 0); T& operator*() const; void swap(scoped_ptr& b); template<typename T> |
它的常用操作如下:
成员函数 |
功能 |
operator*() |
以引用的形式访问所管理的对象的成员 |
operator->() |
以指针的形式访问所管理的对象的成员 |
get() |
释放所管理的对象,管理另外一个对象 |
swap(scoped_ptr& b) |
交换两个boost::scoped_ptr管理的对象 |
下列测试代码演示了这些功能函数的基本使用方法。
#include<string> #include<boost/scoped_ptr.hpp> #include<boost/config.hpp> void test() *sp = 1234568901L; long * lp2 = newlong; sp.swap(sp2); sp.reset(NULL); } void main() |
boost::scoped_ptr和std::auto_ptr的选取:
boost::scoped_ptr和std::auto_ptr的功能和操作都非常类似,如何在他们之间选取取决于是否需要转移所管理的对象的所有权(如是否需要作为函数的返回值)。如果没有这个需要的话,大可以使用boost::scoped_ptr,让编译器来进行更严格的检查,来发现一些不正确的赋值操作。
Boost智能指针——scoped_ptr相关推荐
- [转] Boost智能指针——scoped_ptr
http://www.cnblogs.com/tianfang/archive/2008/09/15/1291050.html boost::scoped_ptr和std::auto_ptr非常类似, ...
- 在你的代码中使用Boost智能指针
在你的代码中使用Boost智能指针 Smart Pointers to boost your code(By peterchen) 翻译 masterlee Download source file ...
- boost智能指针之shared_ptr,scoped_ptr,intrusive_ptr,weak_ptr源码简析
boost库实现了各种智能指针,基本上都纳入了c++11标准中,boost库的smart_ptr目录下就是各种指针的实现了: 1.shared_ptr template<class T> ...
- 【Boost】boost库中智能指针——scoped_ptr
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放.下列代码演示了该指针的基本应用: #include <str ...
- Boost智能指针——boost::scoped_ptr(使用及原理分析)
简介 boost::scoped_ptr是一个比较简单的智能指针,它能保证在离开作用域之后它所管理对象能被自动释放.下面这个例子将介绍它的使用: 1 #include <iostream> ...
- Boost智能指针——shared_ptr
boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限.顾名思义,boost::shared_ptr是可以 ...
- boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
作者 | .NY&XX 责编 | 屠敏 出品 | CSDN 博客 为什么要使用智能指针 C++没有提供类似JAVA的垃圾回收机制,因此Boost可以通过智能指针来管理内存避免一些问题.C++继 ...
- 全面剖析 C++ Boost 智能指针! | CSDN 博文精选
作者 | .NY&XX 责编 | 屠敏 出品 | CSDN 博客 为什么要使用智能指针 C++没有提供类似JAVA的垃圾回收机制,因此Boost可以通过智能指针来管理内存避免一些问题.C++继 ...
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string> #include <ios ...
最新文章
- java中的NAN和INFINITY
- 2018html游戏引擎,跨平台三维游戏引擎Unity Pro 2018.1 Win x64
- SonarQube是如何工作的
- EntityFramework Core是否可以映射私有属性呢?了解一下。
- apache camel_REST端点,可使用Apache Camel进行集成
- 常用开源 SLAM 方案
- 西门子PLC与安川变频器Modbus通信
- 7,JESD204B接口的关键问题
- 计算机硬件cpu指令执行过程,cpu执行指令的过程详解
- 过 DNF TP 驱动保护(二)
- SIFT、SURF、Harris、BRIEF、FAST、DAISY、FAST经典描述子简介
- 半透明物体与深度写入
- 区块链技术最佳的监管方式是智能合约监管智能合约
- 国产操作系统UOS安装教程
- 用机器学习计算工作技能匹配度
- 【LINUX】libgd-GD库安装
- 伤寒论(太阳病笔记)——学习笔记,更待前辈指点
- 鸿蒙系统 美的,美的九阳搭载鸿蒙系统的家电上市了,这手机系统上市真的稳了...
- django rest framework学习准备,面向对象中类的使用。
- python爬虫实战之逆向分析酷狗音乐