码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++ 条款13

时间:2015-06-24 10:59:50      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

以对象管理资源

资源的种类很多,动态分配的内存、文件描述器、互斥锁、图像界面中画刷、数据库连接、网络socket等。资源一般是有限的,当你不用时,必须释放。不然就会造成资源浪费,更严重的情况下,非法占有所有资源导致程序崩溃。

那么我们怎么样才能合理使用资源?换句话说我们应该怎么样才能做到资源的释放?
本节的核心点是:利用析构函数自动调用机制实现资源的合理释放。

举个例子:

class Investment//基类
{
    ……
};

Investment* CreateInvestment()
{
    ……
}

void fun()
{
    Investment* pInv=CreateInvestment();
    ……
    delete pInv;//释放资源
}

请问你能确保上面的Investment资源能释放吗?很明显你不能保证,可能fun函数中有return语句,或者异常出现,造成无法执行delete pInv语句,就会造成内存泄露。

那么如何避免,这里作者提出的方法就是利用智能指针的特性,实现资源合理释放。
如下:

void fun()
{
    auto_ptr<Investment> pInv(CreateInvestment());
    ……

}

auto_ptr指针会有资源的唯一使用权。当auto_ptr指针给其他指针赋值时,对资源的使用权将被剥夺。

因为pInv是局部变量,一旦出了fun函数范围就会释放,它的析构函数会调用所含资源的delete语句,触发资源的析构函数,实现资源的释放。

另外还有一个智能指针shared_ptr也能实现该功能。它会记录有多少个对象在使用资源,当使用资源的计数器为零时,就会释放资源。并且应用面更广。

Effective C++ 条款13

标签:

原文地址:http://blog.csdn.net/u011058765/article/details/46618411

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!