Я часто сталкиваюсь с проблемой, что я должен расширить созданный компилятор конструктор копии. Пример:
class xyz;
class C
{
...
int a, b, c;
std::set<int> mySet;
xyz *some_private_ptr;
};
Предположим, что some_private_ptr
следует копировать только при определенных условиях. Для других условий он должен быть reset до NULL
на копии. Поэтому мне нужно написать конструктор копирования, например:
C::C(const C &other) :
a(other.a),
b(other.b),
c(other.c),
mySet(other.mySet)
{
if(CanCopy(other.some_private_ptr)) // matches condition
some_private_ptr = other.some_private_ptr;
else
some_private_ptr = NULL;
}
Проблема в том, что класс может иметь несколько членов данных, и я, скорее всего, не забуду обновить конструктор копирования, когда я добавлю элемент данных. Было бы очень приятно, если бы я просто написал.
C::C(const C &other) :
C::default_copy(other)
{
if(CanCopy(other.some_private_ptr)) // matches condition
some_private_ptr = other.some_private_ptr;
else
some_private_ptr = NULL;
}
Это сделает мой код более безопасным и простым в обслуживании. К сожалению, я не знаю такой возможности. Есть ли?