C++11资源管理新方法ON_SCOPE_EXIT

C++11引入了智能指针如shared_ptr和unique_ptr以改善内存管理,避免手动delete。然而,智能指针不能与普通指针混用以防止悬挂指针。为了解决这个问题,C++11提出了ON_SCOPE_EXIT,它类似一个资源管理类,在作用域结束时自动执行指定操作,如通过lambda表达式实现文件关闭或其他清理工作,提供了一种灵活且安全的资源管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看一下背景:在C++98的语言机制中,对象在超出作用域的时候其析构函数会被自动调用。接着,Bjarne Stroustrup在TC++PL里面定义了RAII(Resource Acquisition is Initialization)范式(即:对象构造的时候其所需的资源便应该在构造函数中初始化,而对象析构的时候则释放这些资源)。RAII意味着我们应该用类来封装和管理资源,对于内存管理而言,Boost第一个实现了工业强度的智能指针,如今智能指针(shared_ptr和unique_ptr)已经是C++11的一部分,简单来说有了智能指针意味着你的C++代码基中几乎就不应该出现delete了。
对于C++98的内存管理,我们可以建立一个资源管理类,举个例子:

class A
{
public:
	A(){}
};

void rsrlek()
{
	A* a = new A();
	//do something    /*<-------------这里可能出现异常导致程序退出,即指针a还没delete就退出了,于是就会出现内存泄露现象*/
	delete a;
}

现在运用资源管理类进行内存管理:

class A
{
public:
	A(){}
};
class B
{
public:
	B() :a(new A()){}
	~B(){ delete a; }
private:
	A* a;
};
void nonrsrlek()
{
	B b;
	//do something
	//delete a;   /*<----------这里不需要显式删除指针*/
}   /*<------------------函数退出,对象b自动析构&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值