C++没有final或finally,如何解决异常情况下资源的释放问题?

#include "stdafx.h"
#include <iostream>

class TestA
{
public:
	TestA()
	{
		std::cout << "TestA" << std::endl;
	}

	~TestA()
	{
		std::cout << "~TestA" << std::endl;
	}

	void Print()
	{
		int a = 20;
		int b = 1;

		std::cin >> b;
		std::cout << "a / b = " << a / b << std::endl;
	}
};


int main()
{
	try
	{
		TestA a;
		a.Print();
	}
	catch (std::exception& e)
	{
		std::cerr << e.what() << std::endl;
	}
	catch (...)
	{
		std::cout << "Unknown Exception" << std::endl;
	}

	int b = 0;
	std::cin >> b;

    return 0;
}

以上代码运行时,如果输入0,就会产生异常!然而C++并没有final或finally这样的方式来对异常发生后的处理。这个时候就需要用到析构函数,运行程序,输入0,最后打印:

TestA
0
~TestA
Unknown Exception

当抛出异常后,TestA对象的析构函数先于异常捕获被调用,且一定能被调用!

要捕获SEH异常,请参考:C++使用try,catch在VS2015中捕获异常

猜你喜欢

转载自my.oschina.net/u/3489228/blog/1836558