即使使用复制构造函数,克隆对象也会更改原始对象
Cloned object is changing original object even with using a copy constructor
我有一个名为 state
的 State
对象。我试图通过调用函数 applyMoveCloning()
来克隆它,该函数使用复制构造函数创建一个名为 newState
的新 State
对象。
public State applyMoveCloning(State oldState, Move move) {
State newState = new State(oldState); // Calls copy constructor
applyMove(newState, move); // Calls applyMove() on the newState
return newState;
}
这里是我打电话的地方applyMoveCloning()
State clonedState = game.applyMoveCloning(state, moves.get(i));
问题是,每当我对 clonedState
进行更改时,它都会更改我的旧 state
的属性,即使它们是不同的对象(一个只是具有与另一个相同的属性)
这是我的复制构造函数
public State(State another) {
this.width = another.width;
this.height = another.height;
this.board = another.board;
}
这怎么会发生?我又不是用State newState = state;
克隆的,所以我不明白。
哪些属性受到影响?
假设 width
和 height
是整数,它们是按值复制的,不太可能改变。
另一方面,board
看起来像一个参考,您的克隆状态正在与旧状态共享。
我有一个名为 state
的 State
对象。我试图通过调用函数 applyMoveCloning()
来克隆它,该函数使用复制构造函数创建一个名为 newState
的新 State
对象。
public State applyMoveCloning(State oldState, Move move) {
State newState = new State(oldState); // Calls copy constructor
applyMove(newState, move); // Calls applyMove() on the newState
return newState;
}
这里是我打电话的地方applyMoveCloning()
State clonedState = game.applyMoveCloning(state, moves.get(i));
问题是,每当我对 clonedState
进行更改时,它都会更改我的旧 state
的属性,即使它们是不同的对象(一个只是具有与另一个相同的属性)
这是我的复制构造函数
public State(State another) {
this.width = another.width;
this.height = another.height;
this.board = another.board;
}
这怎么会发生?我又不是用State newState = state;
克隆的,所以我不明白。
哪些属性受到影响?
假设 width
和 height
是整数,它们是按值复制的,不太可能改变。
board
看起来像一个参考,您的克隆状态正在与旧状态共享。