我想在尝试使用某个类的复制构造函数时会捕获一个异常,这会抛出异常。
#include <iostream>
class dont_copy_me {
public:
dont_copy_me() {}
dont_copy_me(const dont_copy_me& rhs) {throw;}
dont_copy_me(dont_copy_me&& rhs) {throw;}
~dont_copy_me() {}
};
int main() {
try {
dont_copy_me obj;
dont_copy_me obj_1(obj);
} catch(...) {
std::cout << "exception caught" << std::endl;
}
return 0;
}
但我不断
terminate called without an active exception
Aborted (core dumped)
怎么了?如何捕获复制构造函数引发的异常?(因为这就是我所需要的)
实际抛出这样的异常:
#include <iostream>
#include <stdexcept>
class dont_copy_me {
public:
dont_copy_me() {}
dont_copy_me(const dont_copy_me& rhs) {throw std::runtime_error("Fail!");}
dont_copy_me(dont_copy_me&& rhs) {throw std::runtime_error("Fail!");}
~dont_copy_me() {}
};
int main() {
try {
dont_copy_me obj;
dont_copy_me obj_1(obj);
} catch(...) {
std::cout << "exception caught" << std::endl;
}
return 0;
}
这可以满足您的需求。在这里,您可以找到标准例外的列表(在“例外类别”下)。
throw
仅当您已经在处理活动异常时,空表达式才起作用:
抛出当前处理的异常。放弃执行当前catch块,并将控制权传递给下一个匹配的异常处理程序(但不传递给同一try块之后的另一个catch子句:其复合语句被视为已“退出”),重新使用现有的异常对象:没有新的对象。仅当当前正在处理异常时才允许使用此格式(否则,将调用std :: terminate)。如果在构造函数上使用,与function-try-block相关的catch子句必须通过重新抛出退出。
从这里开始,强调我的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句