Effective C++ 条款13

智能指针管理资源
本文介绍如何通过智能指针如auto_ptr和shared_ptr来管理资源,确保资源在不再需要时能够得到合理的释放,避免内存泄漏等问题。利用智能指针的析构函数机制,可以有效地跟踪并管理动态分配的内存。

以对象管理资源

资源的种类非常多,动态分配的内存、文件描写叙述器、相互排斥锁、图像界面中画刷、数据库连接、网络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也能实现该功能。

它会记录有多少个对象在使用资源。当使用资源的计数器为零时。就会释放资源。而且应用面更广。

转载于:https://www.cnblogs.com/blfbuaa/p/7027288.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值