Создание простого в обслуживании конструктора копирования

Рассмотрим следующий класс:

class A {

char *p;
int a, b, c, d;

public:
   A(const &A);
};

Обратите внимание, что я должен определить конструктор копирования, чтобы сделать глубокую копию "p". Это имеет две проблемы:

Большинство полей следует просто скопировать. Копирование их по одному уродливо и подвержено ошибкам.

Что еще более важно, всякий раз, когда новый атрибут добавляется в класс, конструктор копирования должен обновляться, что создает кошмар обслуживания.

Я лично хотел бы сделать что-то вроде:

A(const A &a) : A(a)
{
   // do deep copy of p
   :::
}

Поэтому сначала вызывается конструктор копирования по умолчанию, а затем выполняется глубокое копирование.
К сожалению, это не похоже на работу.

Есть ли лучший способ сделать это? Одно ограничение - я не могу использовать общие / умные указатели.

Предложения Sbi имеют большой смысл. Я думаю, что я пойду с созданием классов-оболочек для обработки ресурса. Я не хочу использовать shared_ptr, поскольку библиотеки надстройки могут быть доступны не на всех платформах (по крайней мере, в стандартных дистрибутивах, например, OpenSolaris).

Я все еще думаю, что было бы замечательно, если бы вы могли каким-то образом заставить компилятор создавать для вас операторы конструктора / присваивания по умолчанию, и вы могли бы просто добавить свою функциональность поверх него. Созданные вручную функции конструктора копирования / оператора присваивания, я думаю, будут хлопотными для создания и кошмаром для обслуживания. Поэтому мое личное практическое правило - любой ценой избегать пользовательских конструкторов копирования / операторов присваивания.

Спасибо всем за их ответы и полезную информацию и извините за опечатки в моем вопросе. Я печатал это с моего телефона.

Ответы на вопрос(9)

Ваш ответ на вопрос