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>()

你可能感兴趣的:(boost之智能指针)