构造函数中引发的异常
Exception thrown in a Constructor
我试图了解当构造函数抛出异常时会出现什么问题。
例如,此代码的一部分:
#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();
相反。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 如何编写带有异常的构造函数
- 从 C++ 中异常的构造函数引发异常
- 我正在尝试创建一个使用 c++ 中的参数包构造函数的异常类
- 稍后在构造函数中重新启动异常指令删除此指令
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 构造函数中引发的异常
- 如何捕获源自静态分配对象的构造函数的异常?
- 从构造函数内存泄漏引发异常
- C++:如何捕获构造函数引发的异常?
- std::vector::emplace() 真的在面对抛出移动构造函数/赋值运算符时提供了强大的异常保证吗?
- V8 - 节点C++插件 - 在构造函数中引发异常会导致"致命错误:v8::ToLocalChecked Em
- 为什么要抛出引用调用复制构造函数的异常?
- std::vector 默认构造函数可以抛出异常吗?
- 如何防止构造函数在引发异常时创建对象
- 当构造函数的参数类型错误时引发异常
- 异常构造函数中的例外
- C++11 引入了采用 'const char*' 的异常构造函数.但是为什么
- 在异常构造函数中参数化错误消息是一种好的做法吗
- 异常构造函数来填充字符串流