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

c – 具有引用类成员的赋值 *** 作符,第1张

概述只要新问题正在从我以前的问题 Overloaded assignment operator causes warning about recursion发展出来,我被合法地敦促将其作为新的问题发布.我在我的类Player中有一个引用成员,我想实现这个类的复制构造函数和赋值运算符(=).我不得不提到,目的是对函数vector.erase进行精细的处理,因为没有这样,它就不能正常工作.我使用一个向量 只要新问题正在从我以前的问题 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 – 具有引用类成员的赋值 *** 作符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1251064.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存