抛出异常时是否创建了std :: exception对象?

时间:2014-03-18 06:32:30

标签: c++ exception c++11 copy-constructor move-constructor

我有一个实现CustomException的类std::exception,其中我明确地删除了副本并移动构造函数。当我抛出该类的异常时,会有编译错误来调用已删​​除的构造函数。

是否在某处创建了CustomException实例?抛出异常时会创建哪些对象?

1 个答案:

答案 0 :(得分:6)

当你抛出时,构造一个异常对象,它与throw的操作数具有相同的类型,并删除了顶级cv-qualifiers(如果你抛出一个数组或函数,它们也会衰减到它们相应的指针) )。

所以你所做的是禁止,我害怕。

C ++标准章节[except.throw]§5:

  

当抛出的对象是类对象时,即使复制/移动操作被省略,也应该可以访问复制/移动构造函数和析构函数(12.8)。