gpt4 book ai didi

c++ - 在异常处理中避免复制

转载 作者:太空狗 更新时间:2023-10-29 23:34:06 25 4
gpt4 key购买 nike

我可以通过以下方式避免复制对象吗?

MyClass Obj;

try {
throw &Obj;
}
catch(MyClass *a) {

}

最佳答案

如果对象太昂贵而无法复制,则不应将其作为异常抛出 - 句号。异常类应该相当简单和轻量级。并且您应该始终通过引用(可能通过 const 引用)捕获异常 - 捕获指针是一种糟糕的风格。所以你的代码最好写成:

try {
throw MyClass();
}
catch( const MyClass & a) {
}

为回应您的评论,此:

struct A {
A() {}
private:
A( const A & ) {}
};

int main() {
throw A();
}

应该是一个错误。但是您根本不应该禁止复制您想要作为异常抛出的类 - 为什么要这样做?

关于c++ - 在异常处理中避免复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com