The C++ source code below:
#include <cstdio> #include <iostream> using namespace std; class CParent { public: CParent() { ref++; cout << "class CParent: constructor ref=" << ref << endl; Function(); }; virtual ~CParent() { ref--; cout << "class CParent: destructor ref=" << ref << endl; } virtual int Function() { cout << "\tA::Function()" << endl; return ref; } static unsigned int ref; }; class CChild : public CParent { public: CChild() { ref++; cout << "\tclass CChild: constructor ref=" << ref << endl; m_a = new CParent(); }; virtual ~CChild() { ref--; cout << "\tclass CChild: destructor ref=" << ref << endl; delete m_a; } static unsigned int ref; private: CParent *m_a; }; unsigned int CParent::ref = 0; unsigned int CChild::ref = 0; int main() { int i; int n = 2; CChild *c = new CChild[n]; for(i=0; i(&c[i]); printf("p[%d].Function()=%d\n", i, p->Function()); } cout << "CChild::Ref=" << CChild::ref << endl; delete [] c; }