c++ - operator= 重载,终止符递归调用
问题描述
我在重载赋值运算符时遇到问题。我在控制台中收到“递归调用终止符”错误。
我对数据结构比较陌生,我在调试这个问题时遇到了麻烦。
这是类声明:
class Player
{
public:
Player(const unsigned int x_, const unsigned int y_, const char i_);
Player(const Player& p_);
~Player();
unsigned int getX() const;
unsigned int getY() const;
char getI() const;
void updatePosition(int newX, int newY);
Player& operator=(const Player& p_);
private:
struct Position{
unsigned int x;
unsigned int y;
};
Position* pos;
char i;
};
下面是 operator= 函数的实现:
Player& Player::operator=(const Player& p_)
{
delete pos;
pos = nullptr;
pos = new Position();
pos->x = p_.getX();
pos->y = p_.getY();
i = p_.getI();
return *this;
}
解决方案
我认为使用Position* pos
不是一个好的选择。您始终必须通过构造函数对其进行初始化。
尽管您这样做了Player& operator=(const Player& p_)
,但我认为第一行和第二行存在问题。pos
您已经在内存中删除了,delete pos
但您正在尝试设置pos
为nullptr
.
推荐阅读
- ruby-on-rails - 如何在我的规范中批准 PayPal 付款?
- vba - 如何根据 word 中带有宏的前导字符更改标题样式?
- android - ALTBEACON 库 - 后台模式?
- c++ - 如何设置参数以使用 QProcess 运行类文件?
- c - C - 读取文件时的无限循环
- react-native - 在 React Native 中卸载应用程序时,我可以捕获事件吗?
- php - 除了@yahoo 帐户之外,所有发件人都收到了 PHP 联系表格
- asp.net - URLEncode 在浏览器 MVC 中不起作用
- php - 尝试更新重复列的行时的 MySQL PHP 语法
- tfs - 您可以将迭代映射到 TFS 板上的列吗?