boost之智能指针

最近在看一本书《boost程序库完全开发指南》,boost是一个强大的C++程序库,丰富了C++的功能和表现力,使得C++软件开发更加简洁、优雅、灵活和高效。因为之前使用Qt做了很多项目,我发现boost和Qt有很多相似之处,比如时间、智能指针、字符串处理、函数信号槽等,在Qt中最好还是用Qt中封装好的东西来做。下面归纳最近所学习的boost只能指针知识。

一、为何要使用智能指针

C++程序员通常使用RAII机制(资源获取即初始化)来管理内存资源,在构造函数中申请资源,析构函数中释放资源。局部对象是用声明的方式在栈上创建的,RAII机制工作正常。但如果对象是通过new的方式在堆上创建的,那么使用完之后必须手动delete才能释放资源。智能指针为了解决这个问题而出现,退出作用域时,智能指针总能调用delete析构在堆上动态分配的对象。

使用智能指针需要包含头文件

#include <boost/smart_ptr.hpp>

using namespace boost;

二、scoped_ptr

特点:只能在本作用域内使用,不能转让。(在内部实现中,拷贝构造函数和赋值操作符都被声明为私有的)

reset()函数重置scoped_ptr,删除原来的指针,再保存新的指针值(一般不调用)

scoped_ptr不支持比较操作,但可以测试它是否为空。

swap()交换两个scoped_ptr保存的原始指针。

get()可以获得scoped_ptr保存的原始指针。

三、shared_ptr

引用计数型智能指针,可以被自由地拷贝和赋值,当没有代码使用(引用计数为0时)才删除被包装的封装的对象。

reset()将引用计数减一,引用计数为0时才发生删除操作。

使用unique()和use_count()来检查引用计数。

支持比较操作。

线程安全。

转型函数有const_pointer_cast<T>()、static_pointer_cast<T>()、dynamic_pointer_cast<T>()

时间: 2024-10-10 03:45:07

boost之智能指针的相关文章

Boost之智能指针的类别比较

Boost智能指针--scoped_ptr boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放.下列代码演示了该指针的基本应用: #include <string> #include <iostream> #include <boost/scoped_ptr.hpp> class implementation { public:     ~implementation() { std::c

详解Boost库智能指针(shared_ptr &amp;&amp; scoped_ptr &amp;&amp; weak_ptr )

我们先来解释一下什么叫智能指针? 智能指针是利用RAII(在对象的构造函数中执行资源的获取(指针的初始化),在析构函数中释放(delete 指针):这种技法把它称之为RAII(Resource Acquisition Is Initialization:资源获取即初始化))来管理资源. 其本质思想是:将堆对象的生存期用栈对象(智能指针)来管理.也就是当new一个堆对象的时候,立刻用智能指针来接管,具体做法是在构造函数中进行初始化(用一个指针指向堆对象),在析构函数调用delete来释放堆对象.由

基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

Boost库中的智能指针 shared_ptr智能指针

shared_ptr智能指针的意思即:boost::shared_ptr是可以智能的管理动态分配的内存资源,几个智能指针可以同时共享一个动态分配的内存的所有权. 下面我们通过一个例子来学习一下它的用法: 注 :使用shared_ptr智能指针,要加入#include <boost/shared_ptr.hpp>头文件 class example { public: ~example() { std::cout <<"It's over\n"; } void do

boost智能指针指定const对象问题

由于非常习惯用const来加强代码的封装性,结果最近遇到了一些问题,顺带研究了一下 以前基本没用过boost的智能指针,后来进了新项目组,引擎里遇到了大量boost的shared_ptr,intrusive_ptr指针,还有weak_ptr.因为遇到过更好用的weak_ptr,所以boost::weak_ptr感觉是个封装不是很好的瘸腿指针(相比起来可能效率高,但是使用起来很麻烦,访问其中的指针变量必须要调用lock()对象,感觉移植性大大减少,而且写起代码来感觉好冗余..原谅我活在一个徒手用指

boost智能指针之shared_ptr和weak_ptr

std::auto_ptr很多的时候并不能满足我们的要求,比如auto_ptr不能用作STL容器的元素.boost的smart_ptr中提供了4种智能指针和2种智能指针数组来作为std::auto_ptr的补充. shared_ptr<boost/shared_ptr.hpp>:使用shared_ptr进行对象的生存期自动管理,使得分享资源所有权变得有效且安全. weak_ptr<boost/weak_ptr.hpp>:weak_ptr 是 shared_ptr 的观察员.它不会干

boost 智能指针的使用

最近在学习Boost的智能指针,下面对一些很好的文章进行整理如下: Boost智能指针——scoped_ptr http://www.cnblogs.com/TianFang/archive/2008/09/15/1291050.html Boost智能指针——shared_ptr http://www.cnblogs.com/TianFang/archive/2008/09/19/1294521.html Boost智能指针——weak_ptr http://www.cnblogs.com/T

C++ Primer笔记8_动态内存_智能指针

1.动态内存 C++中,动态内存管理是通过一对运算符完成的:new和delete.C语言中通过malloc与free函数来实现先动态内存的分配与释放.C++中new与delete的实现其实会调用malloc与free. new分配: 分配变量空间: int *a = new int; // 不初始化 int *b = new int(10); //初始化为10 string *str = new string(10, ); 分配数组空间: int *arr = new int[10];//分配的

C++ 智能指针

本文转自: http://blog.csdn.net/xt_xiaotian/article/details/5714477 (纯属自学转载) 一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见. 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boost::sco