从C++构造函数调用其他函数

Calling other functions from a C++ constructor

本文关键字:其他 函数 函数调用 C++      更新时间:2023-10-16

初始化所有成员变量后,从构造函数的主体调用非虚函数(包括赋值运算符)是否安全?

是的

- 您可以自由调用其他非虚拟成员函数。 如果派生最多的基类提供了您碰巧想要的实现,则可以调用虚函数。

事实上,在 C++11 允许一个构造函数调用另一个构造函数之前,多个构造函数调用支持函数来执行共享初始化的情况并不少见。

在这些情况下可以调用operator= - 关键是它在分配新状态之前可能尝试的任何清理都将找到要操作的合理值 - 例如,将指针设置为 nullptr 以便delete是安全的。

请注意,您调用的其他函数中允许导致构造函数退出(即未捕获和抑制)的任何异常都将阻止对象存在 - 与直接从构造函数引发的异常相同。

是的,构造函数可以调用非虚函数。

在调用赋值运算符之前,请确保所有成员都已正确初始化,否则对象将处于不一致状态。

当您想从构造函数调用虚拟函数时,请使用"虚拟构造函数惯用法"。