Q
构造函数和异常
2
A
回答
4
这些注释是错误的,如果他们谈论的是一般的构造函数。 Ctors确实可以正常投掷。也许那是在讨论一个保证非伸缩建筑的特定类?
另一方面,强烈建议您编码,这样您的析构函数永远不会抛出。他们这样做是合法的,但在堆栈展开期间抛出异常会导致程序立即终止(致电std::terminate
)。
4
1
您可以从构造函数中抛出异常,但要小心:如果对象构造不当,析构函数将不会被调用。
class Foo
{
public:
Foo(int i)
{
throw i;
}
~Foo()
{
std::cout << "~Foo()" << std::endl;
}
};
int main()
{
try
{
Foo f(42);
}
catch(...)
{
std::cout << "Catched" << std::endl;
}
return 0;
}
输出:
Catched
为了解决这个问题,你应该封装一个构造到另一个:
Foo()
{
}
Foo(int i): Foo()
{
throw i;
}
输出:
~Foo()
Catched
相关问题
- 1. 异常构造函数与异常Java
- 2. 构造函数和抛出异常
- 3. NullPointerException异常的构造函数定义
- 4. 构造函数返回值的异常
- 5. ServerSocket的构造函数抛出异常
- 6. 处理构造函数的异常
- 7. 在构造函数中捕获异常
- 8. EJB3构造函数抛出异常?
- 9. REST异常需要构造函数
- 10. Angular2,构造函数DI抛出异常
- 11. 如何捕获构造函数异常?
- 12. 从构造函数中抛出异常
- 13. 移动构造函数和非常拷贝构造函数
- 14. 通过__init__构造对象并忽略构造函数异常
- 15. 异常异常构造
- 16. Android和GSON投掷No-Args构造函数未找到异常
- 17. 常量和重载构造函数
- 18. C#构造函数和常量神秘
- 19. 异常构造类
- 20. C++:构造器之间的差异()和构造函数(无效)
- 21. 的Javascript同时创造“不是构造函数”异常物体
- 22. 构造函数中的调用基构造函数和其他构造函数
- 23. 构造函数和析构函数 - C++
- 24. C++析构函数异常
- 25. 你可以从请求对象 - csrf构造函数异常构造csrf吗?
- 26. 告诉除了功能和它的参数的构造函数和析构函数抛出的异常
- 27. 在构造函数中有多个参数的异常
- 28. Fluent Nhibernate抛出异常FluentNHibernate.Automapping.IAutoClasslike ...缺少无参数构造函数
- 29. 角2参数传递到构造函数抛出异常DI
- 30. 智能指针和构造异常
鉴于'new'可以抛出,我会说你的“A”是错误的。 – DavidO
也许这意味着“构造函数不能返回错误,所以通知构造错误的惯用方式是抛出异常”...... – juanchopanza