c++中构造函数抛出的Catch错误
Catch error thrown by constructor in C++?
我有一个类foo
(我不能修改),只有一个构造函数,接受一个参数,像这样:
foo bar("Hello!");
因为构造函数可以抛出错误,所以我想实现错误处理。我的第一次尝试是这样的:
try {
foo bar("Hello!");
}
catch {
cerr << "Something went horribly wrong...";
return -1;
}
但是,现在foo
在try
块的范围内,不能在其他地方使用。如果我理解正确的话,我不能在没有初始化的情况下声明一个对象,所以我可以在try
块之外声明bar
。那么,如何捕获构造函数抛出的错误呢?
EDIT:澄清一下,这是在我的main
中,在catch
中我将中止程序。此外,参数是一个将被打开的文件,因此没有已知的永远不会引发异常的安全输入。
问题相当简单:构造函数失败,因此从未创建bar
对象。c++强制执行这一点,并防止在这种情况下使用bar
。
你可以用另一种方法解决这个问题:
foo makeFoo()
{
try {
return foo("Hello!"); // May throw
}
catch(...) {
return foo("Safe"); // We know that "Safe" will not throw.
}
}
bar foo{makeFoo()};
如果要在抛出异常时退出程序,可以打印错误消息并在catch中调用exit(EXIT_FAILURE)
。
你可以使用堆分配:
foo *p = 0;
try {
p = new foo("parm");
} catch(const Error& err) {
...
}
foo& instance = *p;
// Here you can use instance normally...
delete p; // destroy before leaving scope (or use a smart pointer)
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 我可以使用 try catch 语句来捕获任何错误而不是具体错误吗?
- 提取 try-catch 时出现运行时错误
- 为什么 catch 不处理此错误C++
- libpng错误不会被try/catch块捕获
- 当错误存在时,为什么我的程序不执行第二个catch块
- C中的Duktape-catch错误
- 使用Throw和Catch的未处理异常运行时错误
- 在另一个lambda中调用catch块中捕获的lambda会产生GCC错误
- 如何从c++ catch(..)块获取错误消息
- 嵌套的try/catch块用于跨类传播错误
- c++中构造函数抛出的Catch错误
- Try/Catch VS在C++中返回错误代码
- C++ 如果引入 try-catch,则出现分段错误