use*_*541 2 c++ exception-handling
我可以通过以下方式避免复制对象吗?
MyClass Obj;
try {
throw &Obj;
}
catch(MyClass *a) {
}
Run Code Online (Sandbox Code Playgroud)
小智 10
如果对象太昂贵而无法复制,则不应将其作为异常抛出 - 完全停止.异常类应该相当简单和轻量级.并且你应该总是通过引用捕获异常(可能通过const引用) - 捕获指针是坏的风格.所以你的代码应该写得更好:
try {
throw MyClass();
}
catch( const MyClass & a) {
}
Run Code Online (Sandbox Code Playgroud)
回应你的评论,这个:
struct A {
A() {}
private:
A( const A & ) {}
};
int main() {
throw A();
}
Run Code Online (Sandbox Code Playgroud)
应该是一个错误.但是你根本不应该禁止复制你想要抛出的类作为例外 - 你为什么要这样做?