|
关于class object的析构, 我有下面的疑问:
class A
{
public:
virtual void Say(){ cout<< "A" <<endl; }
~A(){};
};
class B :public A
{
public:
virtual void Say(){cout<< "B" <<endl; }
~B(){}
};
class C:public B
{
public:
virtual void Say(){cout<< "C" <<endl; }
~C(){}
};
int main()
{
C *p = new C;
p->Say(); //调用C::SAY()
p->~C(); //照原书说法, *p成为一个B的object
p->Say(); //应该调用B::SAY, 但实际调用A::SAY, 下面都是A::SAY
p->B::~B();
p->Say();
p->A::~A();
p->Say();
return 0;
}
难道是在~C()中就调用了~B()? 而~B()中又调用了~A()?
而不是先调用~C()再调用~B(), ~A()?
又或者是编译器自己决定如何实现? |
|