class A { private: int num; char* ptr; A (const A& obj); public: A (int n = 10, char ch = 'A'); ~A(); int GetNum () { return num; } char* GetPtr () { return ptr; } }; A::A (int n, char ch) { num = n; ptr = new char [num]; for (int i = 0; i < num; ++i) { ptr[i] = ch; } } A::A (const A& obj) { num = obj.num; ptr = new char[num]; for (int i = 0; i < num; ++i) { ptr[i] = obj.ptr[i]; } } A::~A() { delete [] ptr; } class B { private: int num; A** ptr; public: B (int n, int* iarray, char* carray); B (const B& obj); ~B(); }; B::B (int n, int* iarray, char* carray) { num = n; ptr = new A* [num]; for (int i = 0; i < num; ++i) { ptr[i] = new A (iarray[i], carray[i]); } } // Copy constructor should copy the objects // being pointed to, not just the pointers. B::B (const B& obj) { int itemp; char ctemp; num = obj.num; ptr = new A* [num]; for (int i = 0; i < num; ++i) { itemp = obj.ptr[i]->GetNum(); ctemp = *(obj.ptr[i]->GetPtr()); ptr[i] = new A (itemp, ctemp); } } B::~B() { for (int i = 0; i < num; ++i) { delete [] ptr[i]; } delete [] ptr; }