复制构造函数中出现异常的可能原因是什么
What are possible reasons for exception in copy constructors?
我在Herb Sutter的书中看到,复制构造函数可能会引发异常。
我的第一个问题是,复制构造函数是否总是会抛出异常?
我的第二个问题是,如果一个复制构造函数不使用复制构造函数中的新运算符和其他函数,是否还有可能的异常?
如果你所说的"执行异常"意味着它可能会抛出异常,那么不是。并不是每个复制构造函数都会抛出异常。如果类只包含一个int,而复制构造函数只复制了int,那么它就不可能抛出异常。
任意复制构造函数是否会抛出异常,实际上只是一般问题的一个特例,任何函数都会抛出异常吗?
正如您所期望的,这完全取决于它所调用的其他函数的作用。如果它们中的任何一个使用throw或执行一些抛出异常的特殊行为(可能是定义了实现),那么它可能会抛出异常。否则不会。
理论上,除了析构函数和main
之外,几乎任何C++函数都可能引发异常,这取决于程序员所写的内容。
并非所有复制构造函数都抛出异常。例如,默认情况下,任何"纯旧数据"或"标准布局"结构/类都有永远不会抛出的复制构造函数。然而,大多数值得讨论的类都包含map
、vector
或string
,所有这些类都具有可能抛出std::bad_alloc
的复制构造函数。
struct person {
char name[20];
int id;
int height;
};
到目前为止,std::bad_alloc
是复制构造函数中最常见的异常,但任何异常都是可能的。要了解复制可能引发的异常,您必须查看特定类的规范。
相关文章:
- 是什么导致了Unity 3D中的"错误线程异常"?
- C++异常被捕获延迟,可能导致这种情况的原因是什么?
- C++ 捕获异常后进行清理的标准方法是什么?
- 处理许多自定义异常的最佳方法是什么
- 提出异常并处理C 的某些异常类型的正确方法是什么?
- 在类中抛出异常的最佳方法是什么
- 是什么导致异常输出以及如何修复
- 与Java的InputMismatchException和IOException Handling等效的C++异常处理机制是什么
- 在C++中使用异常的可能的错误处理策略是什么,它们的后果和影响是什么
- 在使用SFML时,我会得到记忆或出于界限异常,这是什么问题
- C++ 异常中的 catch(异常)是什么意思?
- 用作类型或异常规范时"see below"是什么意思?
- procdump.exe显示的异常的含义是什么
- 复制构造函数中出现异常的可能原因是什么
- 控件的CWnd::DefWindowProc上发生Stackloverlow异常的原因是什么
- 异常代码"EXC_I386_GPFLT"的含义是什么?
- 向量::插入的异常安全保证是什么?
- 抛出的(默认)构造函数中的异常保证应该是什么
- C++11 中默认虚拟析构函数的异常规范是什么?
- C++ 我不明白我的异常是什么()行为