有三个类A,B,C。B是A的子类,C又是B的子类。代码如下:
class A
{
public:
A(){ cout << "new A " << endl; }
~A(){cout << "delete A" << endl;}
};
class B : public A
{
public:
B(){cout << "new B " << endl;};
~B(){cout << "delete B" << endl;};
};
class C : public B
{
public:
C(){cout << "new C " << endl;}
~C(){cout << "delete C" << endl;};
};
以下是测试代码以及输出的结果:
第一个(p1)就不用说了,new一个A,然后再delete;
第二个(p2)new了一个C,构造函数从C的祖先开始向下构造,析构的时候在从C开始向上构造;
第三个(p3) (和第四个类似,直接参考第四个);
第三个(p3)new了一个C,构造函数从C的祖先开始向下构造,然后赋给指针p4,但是p4是B型的,所以new出的类饮食转换为B类型,所以析构的时候是从B开始向上构造。