gpt4 book ai didi

c++ - 我们什么时候应该将赋值运算符设为私有(private)而不是实现

转载 作者:太空狗 更新时间:2023-10-29 20:31:01 27 4
gpt4 key购买 nike

这是一个老考题,要求我们在有意义的时候编写赋值运算符和复制构造函数、析构函数。

给定以下代码:

class U { /* code not specified here */ };
class A { /* code not specified here */ private: U& u_; };

我了解到答案是:A 持有对 U 实例的 C++ 引用,可以复制但不能重置。因此你必须:

• 编写一个复制构造函数,将其 U 初始化为 A 源实例引用的同一实例。

• 将其赋值运算符设为私有(private)且不实现

我知道引用无法重置。但是,这是否意味着只要类包含引用成员数据,我就永远不能使用赋值运算符?下面的代码有意义吗?以下代码是我自己写的(不是答案)

  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;
}

提前致谢。

最佳答案

不能更改引用以引用其他内容。但是你可以做你在这里做的,因为做:

u_ = a.u_;

实际上改变了引用的值。它会记录更改哪个引用的值。

关于c++ - 我们什么时候应该将赋值运算符设为私有(private)而不是实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com