#include <iostream>
using std::cout;
using std::endl;
class A {
char *p;
public:
A() : p(new char[255]) {}
~A() { cout << "~A()" << endl; delete[] p; }
};
class B {
A *Ap;
public:
B() : Ap(new A()) {}
~B() { cout << "~B()" << endl; delete Ap; }
};
class C {
A Ao;
public:
C() : Ao() {}
~C() { cout << "~C()" << endl; }
};
int main()
{
B *Bp = new B();
cout << "delete Bp;" << endl;
delete Bp;
C *Cp = new C();
cout << "delete Cp;" << endl;
delete Cp;
B b;
C c;
cout << "end main()" << endl;
return 0;
}
/*
run:
delete Bp;
~B()
~A()
delete Cp;
~C()
~A()
end main()
~C()
~A()
~B()
~A()
*/