Это старый экзаменационный вопрос, который просит нас писать операторы присваивания и копировать конструкторы, деструкторы, когда это имеет смысл.
С учетом следующего кода:
class U { /* code not specified here */ };
class A { /* code not specified here */ private: U& u_; };
Я узнал, что Ответ таков:
A содержит ссылку C ++ на экземпляр U, который может быть скопирован, но не может быть сброшен. Поэтому вы должны:
• Написать конструктор копирования, который инициализирует свой U тому же экземпляру, на который ссылается исходный экземпляр A.
• Сделать свой оператор присваивания частным и не реализовывать
Я знаю, что ссылка не может быть сброшена. Однако означает ли это, что я никогда не смогу использовать оператор присваивания, когда класс содержит данные ссылочного члена?
Имеет ли смысл следующий код?
Следующий код написан мной (это не ответ)
class U{
public:
int u;
};
class A{
public:
A(U& u):u_(u){}
A& operator=(const A& a){
u_ = a.u_;
return *this;
}
U& u_;
};
int main(){
U u1;
U u2;
A a1(u1);
A a2(u2);
a1 = a2;
a1.u_.u = 1;
a2.u_.u = 2;
cout << "a1.u_.u : " << a1.u_.u << endl;
cout << "a2.u_.u : " << a2.u_.u << endl;
}
Заранее спасибо.