C++ std::队列推送弹出两个不同的对象获取第一个对象
C++ std::queue push pop two different objects gets first object
我有以下程序:
int main(){
std::queue<Stone> Q;
Stone s1=Stone(8,8);
s1.setStoneColor(Color::WHITE);
Q.push(s1);
Stone curr = Q.back();
Q.pop();
Stone s2=Stone(7,7);
s2.setStoneColor(Color::BLACK);
Q.push(s2); //here Q contains x=8,y=8,colour=WHITE...why??
Stone curr2 = Q.back();
Q.pop();
return 0 ;
}
为什么在队列末尾的白色石头与坐标 (x,y(=(8,8( ?
我认为对象是按值复制到队列中的,因此没有任何引用/指针。
我还认为我不知何故没有指定析构函数?
是否可以通过使用智能指针以某种方式进行补救?
我来自Java背景,所以这些奇怪的错误令人困惑...谢谢。
如果有帮助,我正在使用Clion IDE。
编辑:我在Xcode中尝试了同样的事情,在推第二块石头后,预计有7,7,黑色...
我相信这是Clion/Cmake/Debugger的事情,有人知道这些吗?
我正在使用的类是:
enum Color{
BLACK=0,
WHITE=1,
BLANK=2
};
和类
class Stone {
int x = 0;
int y = 0;
bool discovered = false;
Color stoneColor;
public:
Stone(int _x, int _y) {
this->x = _x;
this->y = _y;
this->stoneColor = Color::BLANK;
}
void setDiscovered(bool value){
discovered=value;
}
bool getDiscovered(){
return discovered;
}
//setter
void setStoneColor(Color _stoneColor) {
stoneColor = _stoneColor;
}
//getter
Color getStoneColor()const {
return stoneColor;
}
int getPositionX() const {
return x;
}
int getPositionY() const{
return y;
}
bool operator==(const Stone &other) const {
if(this->x==other.getPositionX()&&this->x==other.getPositionY()&& this->stoneColor==other.getStoneColor()){
return true;
}
else{
return false;
}
}
};
当你执行第一个 Q.pop(( 时,预计 Q 至少在下一个 push(( 之前为空。不知道它是如何或为什么有白色石头的。但是关于为什么你认为对象是按值复制的,或者你觉得它们是通过引用复制的,在这种情况下,它们是按值复制的,如果不是 Q.pop,你应该期望它们在那里,因为它们是在 main 函数内的本地范围内声明的,它们应该至少在这个范围内持续存在,除非被销毁。
相关文章:
- 在c++中获取两个大int,并将它们存储在数组中
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 从两个 4x64 位整数数组中获取取模
- 如何在两个列表中比较和获取非包含值
- 如何获取两个 std::map 的公钥?
- 如何获取两个时间点之间的时间
- C++获取两个分隔符之间的字符串并替换它
- 获取两个不同模板的产品类型
- 正则表达式 获取两个换行符之间的文本
- 无法在同一行上获取输出,在 C++ 中两个输出之间有空格
- 获取两个最大值的索引
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法
- 使用位于 C 字符串中的两个字符*获取子字符串
- C++ std::队列推送弹出两个不同的对象获取第一个对象
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 在文本中的两个非唯一字符串之间获取子弦
- 如何获取两个列表的公共元素并将其存储在新列表中而不会重复
- 获取所有方式以两个整数的产品表示数字
- 为什么要提供两个获取函数