加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 具有引用类成员的赋值操作符

发布时间:2020-12-16 05:56:01 所属栏目:百科 来源:网络整理
导读:只要新问题正在从我以前的问题 Overloaded assignment operator causes warning about recursion发展出来,我被合法地敦促将其作为新的问题发布.我在我的类Player中有一个引用类成员,我想实现这个类的复制构造函数和赋值运算符(=).我不得不提到,目的是对函数v
只要新问题正在从我以前的问题 Overloaded assignment operator causes warning about recursion发展出来,我被合法地敦促将其作为新的问题发布.我在我的类Player中有一个引用类成员,我想实现这个类的复制构造函数和赋值运算符(=).我不得不提到,目的是对函数vector.erase进行精细的处理,因为没有这样,它就不能正常工作.我使用一个向量:vector allPlayers;班级球员的成员有:
class Player
{

  private:
  int ID;
  int pMoney;
  int doubleIndicator;
  int squarePosition;
  Bank& bank;
  string pName;
  Square* capturedSquare;
  multimap<string,PropertySquare*> squaresColBought;
  multimap<string,House*> housesColBuilt;

}

如果我想要实现赋值运算符,那么它是否必须避免使用引用作为类成员?地图成员怎么样?我应该如何最终实现赋值运算符?

我不知道的另一个非常重要的问题是当我删除持有播放器的向量的迭代器时,指针类成员指向的对象会发生什么.任何帮助?

解决方法

当你想要一个赋值操作符时,我不会使用引用成员.如果你使用(智能)指针,你可以做
Player &operator=(Player const &other)
{
    bankPtr = other.bankPtr;
    // copy other members
}

在目前的情况下,bank = other.bank将复制other.bank的内容,而不是将此银行指向其他银行引用的内容.

对于多重类型的成员,它们可以被复制没有问题,但请记住,您将获得一个“深”的密钥副本(因为它们是字符串类型),而是一个“浅”的指针副本值,所以你最终得到共享状态.您可能需要使用shared_ptr作为值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读