我有一个实现CustomException
的类std::exception
,其中我明确地删除了副本并移动构造函数。当我抛出该类的异常时,会有编译错误来调用已删除的构造函数。
是否在某处创建了CustomException实例?抛出异常时会创建哪些对象?
答案 0 :(得分:6)
当你抛出时,构造一个异常对象,它与throw
的操作数具有相同的类型,并删除了顶级cv-qualifiers(如果你抛出一个数组或函数,它们也会衰减到它们相应的指针) )。
所以你所做的是禁止,我害怕。
C ++标准章节[except.throw]§5:
当抛出的对象是类对象时,即使复制/移动操作被省略,也应该可以访问复制/移动构造函数和析构函数(12.8)。