В конструкторе копирования struct/class
, как я могу избежать копирования всех базовых (int
, и т.д.) элементов один за другим, если намерение состоит в том, чтобы скопировать указатель успешно? Можно ли расширить конструктор копии по умолчанию в этом смысле?Расширение конструктора копирования по умолчанию
struct Type
{
int a;
double b;
bool c;
// ... a lot of basic members
int* p;
Type()
{
p = new int;
*p = 0;
}
Type (const Type& t)
{
// how to avoid copying these members one by one
this.a = t.a;
this.b = t.b;
this.c = t.c;
// but only add this portion
this.p = new int;
*this.p = *t.p;
}
};
Используйте умный указатель для 'p' и полностью избавитесь от конструктора копирования. – chris
@ DieterLücking, вы правы. Он не должен использовать оператор присваивания по умолчанию. –
@chris Умный указатель несет ответственность только за освобождение ресурсов, а не за их приобретение. Конструктор копирования должен получить ресурсы. – dyp