扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄漏(memory leak)、“野”指针(wild pointer)、访问越界(accessdenied)等问题。曾几何时,C++程序员曾经无限地向往Java、C#等语言的垃圾回收机制。虽然C++标准提供了智能指针std: :auto_ ptr, 但并没有解决所有问题。
阅读完,你会了解到高效的内存管理方法,彻底忘记“栈”(Stack)、“堆”(Heap)等内存分配相关的术语,并且还会发现,Boost 为C++提供的解决方案可能要比Java和C#等其他语言更好。
智能指针(smart pointer)是C++群体中热门的议题,围绕它有很多有价值的讨论和结论。它实践了推荐书目[1]中的代理模式,代理了原始“裸”指针的行为,为它添加了更多更有用的特性。
C++引入异常机制后,智能指针由-种技巧升级为一种非常重要的技术,因为如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时一不管是正常流程离开或是因异常离开一总调用delete来析构在堆上动态分配的对象。
存在很多种智能指针,其中最有名的应该是C++98标准中的“自动指针”std::auto_ ptr,它部分地解决了获取资源自动释放的问题,例如:
int main()
{
auto_ ptr< class_ need_ resource >p1 (new class_ need_ resource) ;
auto_ ptrp2 (factory.create()) ;
}//离开作用域,p1、p2自动析构从而释放内存等资源
三、智能指针utoptr的构造函数接受new操作符或者对象工厂创建出的对象指针作为参数,从而代理了原始指针。虽然它是- -一个对象,但因为重载了operator*和 opreator->,其行为非常类似指针,可以把它用在大多数普通指针可用的地方。当退出作用域时(离开函数main()或者发生异常),C++语言会保证auto_ ptr对象销毁,调用auto_ ptr的析构函数,进而使用delete操作符删除原始指针释放资源。
auto_ ptr很好用,被包含在C++标准库中令它在世界范围内被广泛使用,使智能指针的思想、用法深入人心。但标准库并没有覆盖智能指针的全部领域,尤其是最重要的引用计数型智能指针。
boost.smart_ ptr 库是对C++98标准的-一个绝佳补充。它提供了六种智能指针,包括scoped_ ptr、 scoped array shared ptr、shared array, weak_ ptr 和intrusive_ptr,从各个方面来增强std: :auto_ _ptr, 而且是异常安全的。库中的两个类一-shared ptr和weak_ ptr 已被收入到C++新标准的TR1库中。
接下来的部分将详细介绍scoped ptr、scoped_ array、shared ptr和sharedarray,简要介绍另两个组件weak_ ptr和intrusive_ ptr。它们都是很轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。
这些智能指针都位于名字空间boost,为了使用smart_ _ptr 组件,需要包含头文件
#include
using namespace boost;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流