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

Die*_* Rz 1 c++ exception copy-constructor move-constructor c++11

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

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

jro*_*rok 6

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

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

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

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