为什么抛出引用调用拷贝构造函数的异常?
struct Error
{
Error() {}
Error(const Error&) = delete;
};
int main()
{
Error& error = *new Error;
throw error;
}
编译错误:
error: declared here
Error(const Error&) = delete;
像这样抛出指针时不会发生:
int main()
{
Error* error = new Error;
throw error;
}
没关系。
最佳答案
您不能抛出引用。 Throwing always copies the thrown expression value into a special area of storage set aside for thrown objects .否则,您几乎总是会“捕获”悬空引用,[理论上]您的代码就是这种情况。
无法复制您的错误
类型,因此程序无法运行。
但是,当然可以复制指针,最后一个示例中的主要问题是内存泄漏。此外,您的程序将简单地在 throw
语句处终止,因为您没有任何 try
/catch
。
关于c++ - 为什么抛出引用调用复制构造函数的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50377175/