构造函数中引发的异常

Exception thrown in a Constructor

本文关键字:异常 构造函数      更新时间:2023-10-16

我试图了解当构造函数抛出异常时会出现什么问题。

例如,此代码的一部分:

#include <iostream>
class X
{
public:
X(int);
~X();
private:
int* m;
};
X::X(int y)
{
m = new int(y);
throw std::exception();
}
X::~X()
{
delete m;
std::cout << "Destructor" << std::endl;
}
//---------------------------------------
int main()
{
try
{
X a(4);
}
catch (const std::exception&)
{
std::cout << "ex" << std::endl;
}
system("pause");
// output 
/*  ex
Press any key to continue . . .
*/
}

析构函数不会被调用,所以这是一个内存泄漏!

1(是否可以在不使用任何智能指针的情况下解决此问题?

2(我的主要问题是当构造函数抛出异常时(例如,当我们有一个类的层次结构,或者可能抛出异常的类成员时(会出现什么问题?

我的主要问题是当构造函数抛出异常时会出现什么问题

就像一般的抛掷一样,构造函数没有什么具体的

。C++旨在引入构造函数。

您的示例:

m = new int(y);
throw std::exception();

在任何地方都不好。

用:

auto m = std::make_unique<int>(y);
throw std::exception();

相反。