Недавно я обнаружил, что когда у меня есть указатели внутри класса, мне нужно указать конструктор Copy.
Чтобы узнать, что я сделал следующий простой код. Он компилируется, но дает мне ошибку выполнения при выполнении конструктора копирования.
Я пытаюсь скопировать только значение из указателя скопированного объекта, но избегая назначения того же адреса.
Итак, что здесь не так?
class TRY{
public:
TRY();
~TRY();
TRY(TRY const &);
int *pointer;
void setPointer(int);
};
void TRY::setPointer(int a){
*pointer = a;
return;
}
TRY::TRY(){}
TRY::~TRY(){}
TRY::TRY(TRY const & copyTRY){
int a = *copyTRY.pointer;
*pointer = a;
}
int main(){
TRY a;
a.setPointer(5);
TRY b = a;
b.setPointer(8);
cout << "Address of object a = " << &a << endl;
cout << "Address of object b = " << &b << endl;
cout << "Address of a.pointer = " << a.pointer << endl;
cout << "Address of b.pointer = " << b.pointer << endl;
cout << "Value in a.pointer = " << *a.pointer << endl;
cout << "Value in b.pointer = " << *b.pointer << endl;
return 0;
}
Я буду использовать эту концепцию для других классов с большим количеством указателей в ней, где мне нужно скопировать все значения с объекта на другой. Копирование первоначально необходимо для этого кода, поэтому я хотел бы сохранить возможность копирования (я не буду скрывать конструктор копирования как закрытый).
Кроме того, реальный класс, который мне нужно реализовать, имеет 10 указателей, и он может меняться со временем. Разве нет более умного способа иметь конструктор глубоких копий на С++?...