在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
类上定义的)。