Вы, возможно, думаете об этом.Конструктор копирования просто должен инициализировать все элементы соответствующими значениями исходного объекта, например, так:
B(B const & rhs) : mA(rhs.mA) { }
Это просто тривиальная копия, поэтому, если в ней больше ничего нет, тогда вылучше вообще не писать конструктор копирования.
С другой стороны, если вам нужна копия deep , это может выглядеть примерно так:
B(B const & rhs) : mA(::new A(rhs.mA)) { }
Тем не менее, детали этого зависят от фактической политики владения класса B
в отношении pointee mA
.В зависимости от этих деталей, не забудьте написать соответствующий деструктор, если это необходимо.
Вы также должны написать соответствующий оператор присваивания вашего конструктора копирования, который делает что-то нетривиальное, например:
B & operator=(B const & rhs)
{
if (this != &rhs)
{
A * tmp = ::new A(*rhs.mA); // need try/catch in general!
::delete mA; // OK, no exception occurred if we got here
mA = tmp;
}
return *this;
}