Должны быть реализованы как конструктор копирования, так и оператор присваивания (как указано выше). Однако метод, который может помочь в этом процессе, использует оператор разыменования (*) при копировании данных указателя. Это скопирует данные указателя, а не места памяти. Если вы сделаете ptr1 = ptr2
, он просто устанавливает ячейку памяти ptr1 в ptr2, поэтому мы обращаемся к ней.
Например, я просто покажу краткий пример конструктора копирования:
GetResultStructure(const GetResultStructure& other)
: length(other.length), ptr(new char[length]) // <--- VERY _important_ - initialization of pointer
{
// Alternatively, put your initialization here like so:
// ptr = new char[length];
for(int i=0;i<length;++i)
{
ptr[i] = new char;
*ptr[i] = *other.ptr[i]; // Copy the values - not the memory locations
}
}
И затем, очевидно, обязательно очистите свой деструктор, чтобы предотвратить утечки памяти.
С уважением,
Деннис М.