gpt4 book ai didi

c++ - 为什么抛出引用调用复制构造函数的异常?

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:29 24 4
gpt4 key购买 nike

为什么抛出引用调用拷贝构造函数的异常?

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/

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