在C++中的Base构造函数中,“this”的实际类型是“Base”而不是“Derived”,因此调用虚函数是不安全的。但是,基类在基本构造期间将'this'的值传递给回调对象是安全的,该回调对象将在构造完成后在将来的某个时间调用虚拟函数?

最佳答案

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

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

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

09-04 18:15
查看更多