代码:
#include <iostream>
using std::cout;
using std::endl;
struct A
{
virtual void foo()
{
cout << "A" << endl;
}
A(){ }
};
struct B : A
{
B();
virtual void foo()
{
cout << "B" << endl;
}
};
B b;
B::B()
{
b.foo();
foo();
}
struct C : B
{
virtual void foo()
{
cout << "C" << endl;
}
C() : B(){ }
};
C c;
int main(){ }
当从构造函数或析构函数中直接或间接调用虚函数,包括在类的非静态数据成员的构造或析构期间,并且被调用的函数适用于正在构建或销毁的对象(称其为 x),所调用的函数是构造函数或析构函数类中的最终覆盖函数,而不是更派生类中覆盖它的函数。如果虚函数调用使用显式类成员访问(5.2.5),并且对象表达式是指向 x 的完整对象或该对象的其中一个基类子对象,但不是 x 或其基类子对象之一,则行为未定义。
我一直在尝试收到有关下列问题的信息:
如果虚函数调用使用显式类成员访问(5.2.5),并且对象表达式是指向 x 的完整对象...
什么是 x 的完整对象意思不明确,其中 x
是一个对象。它是否与类型为 x
的完整对象相同?