对于C++基类来说,在构建之后为将来的虚拟调用存储'this'的值是否安全?

Den*_*nis 5 c++ virtual-functions

在Base构造函数的C++中,'this'的实际类型是'Base'而不是'Derived',因此调用虚函数是不安全的.但是,基类在基础构造期间 'this' 的传递给将在构造完成后将来调用虚函数的回调对象是否安全

Zde*_*vic 4

在构造函数中,调用虚方法并非不安全,因为它this是类型Base,而是因为对象尚未完全构造。Derived此时成员尚未初始化,因此执行 中的虚拟方法实现Derived将在未初始化的实例上进行操作。

\n\n

这就是为什么标准指定在构造函数/析构函数调用期间the function called is the final overrider in the constructor\xe2\x80\x99s or destructor\xe2\x80\x99s class and not one overriding it in a more-derived class

\n\n

您可以安全地存储它并从它完全构造的那一刻起调用它的虚函数,即在构造函数退出之后(那些在其上定义的虚函数)Base当然,这些虚函数是在类上定义的)。

\n