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

前端之家收集整理的这篇文章主要介绍了c – 具有引用类成员的赋值操作符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
只要新问题正在从我以前的问题 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作为值.

猜你在找的C&C++相关文章