у меня есть отношения композиции между класса А и В,конструктор копирования и состав
class A
{
A(); //default constructor //EDIT
A(const A &mA); // copy constructor //EDIT
virtual ~A();
};
class B
{
B(A *pA); //constructor
B(const B &mB) //copy constructor
virtual ~B(); //EDIT: destructor to eliminate mA and to build the composition
A* mA;
};
Могу ли я написать конструктор копирования таким образом:
B(const B &mB, A *pA)
мне нужно идти в ногу состав также между скопированными объектами. Неправильно? Существует ли лучшее решение? Спасибо
EDIT: Я постараюсь объяснить мне лучше. Я хочу копию объекта mB и объекта mA. Но если в конструкторе копирования у меня был написан mA = mB.mA, я бы скопировал адрес в исходный объект mA. Поэтому я думаю, что мне нужна глубокая копия, а не ласточка. Моя путаница возникает из-за того, что теперь, из основного, сначала копирую объект mA, а затем копирую mB. Делая это, я думаю, что нужно назначить скопированный объект м с внешней функцией, как
foo(A *pA)
В противном случае я мог бы решить эту проблему, если бы я мог делать глубокую копию тВ. Это называется глубокой копией?
P.S. A и B - абстрактные классы
Вы можете написать эту функцию, но это не конструктор копирования. –
@BenjaminLindley: Вероятно, это должен быть ответ ... –
@OliCharlesworth: У меня нет лучшего решения (потому что я не совсем уверен, что он пытается решить), и я думаю, что это мясо вопроса так или иначе. –