【发布时间】:2018-05-16 17:49:26
【问题描述】:
为什么抛出引用调用复制构造函数的异常?
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;
}
没关系。
【问题讨论】:
-
这些天窥视者非常高兴。好的,所以这些信息可以在其他地方找到 - 但实际上每个问题都是如此。这个介绍得很好,很简洁,误解是可以理解的(笑)。让我们不要那么高兴。
-
@FrançoisAndrieux:
throw Error{}是一个不同的例子,不过,如果我们保持可以“抛出引用”的前提(事实并非如此,这就是答案)。所以,不,这不是“分散注意力”——这是问题的核心。 -
Error error = *new Error我唯一一次看到这样的代码是有人来自 java,一直写new。正如其他人建议的那样throw Error{}就足够了,但是如果您想预先创建变量,请使用Error error{};即,而不是Type var = *new Type(arg1, arg2);您想写Type var{arg1, arg2};
标签: c++ exception copy-constructor throw