Создание простого в обслуживании конструктора копирования
Рассмотрим следующий класс:
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).
Я все еще думаю, что было бы замечательно, если бы вы могли каким-то образом заставить компилятор создавать для вас операторы конструктора / присваивания по умолчанию, и вы могли бы просто добавить свою функциональность поверх него. Созданные вручную функции конструктора копирования / оператора присваивания, я думаю, будут хлопотными для создания и кошмаром для обслуживания. Поэтому мое личное практическое правило - любой ценой избегать пользовательских конструкторов копирования / операторов присваивания.
Спасибо всем за их ответы и полезную информацию и извините за опечатки в моем вопросе. Я печатал это с моего телефона.