Конструктор копирования
B
должен выделить новый объект A
, который копирует data
из исходного parm.a
члена, что можно сделать с помощью конструктора копирования A
:
B(const B &parm) {
a = new A(*(parm.a));
}
Кроме того, в операторе присваивания B
оба объекта A
уже выделены, поэтому просто вызовите оператор присваивания A
:
B& operator=(const B &parm) {
if (this != &parm) {
*a = *(parm.a);
}
return *this;
}
При этом вы можетезначительно упростит код, если вы избавитесь от указателя и позволите компилятору обрабатывать выделение памяти и копировать для вас:
class A {
public:
int data;
A(int parm = 0) : data(parm) { }
~A() { cout << "A is destroyed"; }
};
class B {
public:
A a;
B() : a(10) { }
};