C++ 构造函数和析构函数使用中注意的事项

1、概述

之前整理了一些构造和析构函数的内容,还有一些使用上的细节没有整理,今天就对这些进行一些整理。过年之后就没怎么整理知识,是因为最近在准备换工作,忙着写简历、面试和梳理之前学习的知识。以后会减少知识整理的频率,但是还是会坚持整理的。

2、不让异常逃离析构函数

C++并不禁止析构函数吐出异常,但是它并不鼓励你这样做。这样是有理由的,如下:

class Widget
{
public:
	....
	~Widget(){...}		//假设这里可能会吐出一个异常
};

void DoSometing()
{
	std::vector<Widget> v;
	....					//v在这里被自动销毁
}

当vector v被销毁时,它由责任销毁其内含的所有Widgets。假设v内含10个Widgets,而在析构第一个元素期间,有个异常被抛出。其他9个Widgets还是应该被销毁,否则它们保存的任何资源会发生泄漏,因此v应该调用它们各个析构函数。
但假设在那些调用期间,第二个Widget析构函数又抛出了异常。现在有两个同时作用的异常,这对C++而言太多了。在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确行为。本例中它会导致不明确行为。

但是如果你的析构函数必须执行一个动作,而该动作可能会抛出异常,我们该怎么办呢?有两个办法:

  1. 析构函数中捕捉任何异常,然后吞下他们&#
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值