目前我的代码存在一些重大问题,我希望有人可以对此进行说明。
在我的代码中,我做了;球员=新球员* [2];与球员一起[i] =新球员();在for循环中。给他们真正的价值观。
稍后在我的代码中,我想要这样做:
players[0] = players[1];
delete players[1];
调试时。玩家[0]获得玩家的价值[1]。但下一线球员[0]得到了; string name =< Bad Ptr>以及一些成为-17912312的int值。
我的第一个想法是我需要在Player中创建一个operator =så。我创建了:
Player& operator=(const Player& right);
Player& Player::operator=(const Player& right)
{
this->name=right.name;
this->coins=right.coins;
this->bet=right.bet;
return *this;
}
这没有效果。它甚至没有进入这个功能。为什么我不能分配值?
答案 0 :(得分:0)
players[0] = players[1];
中的将泄漏players[0]
最初指向的对象。在下一个语句中,您可以在两个插槽中查看一个指针后面的对象。如果你没有立即将它设置为NULL,那么你将持有任何不可用的悬空指针。
写op =与案件完全无关,你不应该这样做。
答案 1 :(得分:0)
这是一个悬垂的指针问题。进行作业时
players[0] = players[1];
删除播放器[1]后,您实际上无法使两个内存位置都无法访问。你能解释一下你的目标好一点吗?就像已经说过的那样,你不能为指针做一个operator = overload。为什么你需要首先移除玩家[1]?当您澄清时,将使用更新的建议进行编辑!