关于异常机制请看这篇文章,附链接:
栈解旋是指,在抛出异常的时候,在try语句块内部,抛异常前所有在栈上构造的对象都将会被析构。下面通过程序举例说明:
1. #include <iostream> 2. using namespace std; 3. 4. class TestClass 5. { 6. public: 7. TestClass() 8. { 9. cout << "构造函数" << endl; 10. } 11. ~TestClass() 12. { 13. cout << "析构函数" << endl; 14. } 15. }; 16. 17. void CreateObject() 18. { 19. TestClass t1, t2; 20. cout << "创建对象" << endl; 21. 22. throw TestClass(); 23. } 24. 25. int main() 26. { 27. try 28. { 29. CreateObject(); 30. } 31. catch (TestClass t) 32. { 33. cout << "TestClass 类型异常" << endl; 34. } 35. catch (...) 36. { 37. cout << "其他异常" << endl; 38. } 39. 40. system("pause"); 41. return 0; 42. }
运行结果可以看到,抛异常后调用了两次析构函数