我需要制作一份 GameMaster* thisMaster
的拷贝,这样我就可以在执行操作的同时仍然保持“干净”的拷贝。然而,我现在的做法是,当我对 copy
进行更改时,它也会更改 thisMaster
。
void Move::possibleMoves(GameMaster* thisMaster)
{
GameMaster* copy = new GameMaster(*thisMaster);
}
我该如何解决这个问题?
编辑:我创建了一个复制构造函数,但仍然有同样的问题。
GameMaster::GameMaster(const GameMaster& gm)
{
for(int i=0;i<GAMETILES;i++)
{
gameTiles[i]=gm.gameTiles[i];
}
players=gm.players;
vertLines=gm.vertLines;
horLines=gm.horLines;
turn = gm.turn;
masterBoard=gm.masterBoard;
lastLegal=gm.lastLegal;
lastScore=gm.lastScore;
}
这是 GameMaster 的完整类定义:
Class GameMaster
{
public:
GameMaster(void);
GameMaster(const GameMaster& gm);
~GameMaster(void);
//functions
private:
std::vector <Player*> players;
std::vector <Line> vertLines;
std::vector <Line> horLines;
Tile gameTiles [GAMETILES];
std::vector <std::string>colors;
std::vector <std::string>shapes;
int turn;
Board masterBoard;
bool lastLegal;
int lastScore;
};
对于复制构造函数,我仍然遇到 Board 更改值的问题。它是否也需要复制构造函数?
最佳答案
Class GameMaster
{
public:
GameMaster(void);
GameMaster(const GameMaster& gm);
~GameMaster(void);
//functions
private:
std::vector <Player*> players; // You should make a deep copy because of pointers
std::vector <Line> vertLines; // Shallow copy is OK if Line doesn't have pointers in it
std::vector <Line> horLines; // see above
Tile gameTiles [GAMETILES]; // One by one assignment is OK
std::vector <std::string>colors; // Shallow copy is OK
std::vector <std::string>shapes; // Shallow copy is OK
int turn; // assignment is OK
Board masterBoard; // same questions for GameMaster still exists for copying this
bool lastLegal; // assignment is OK
int lastScore; // assignment is OK
};
这是 Shallow vs Deep copy 的链接
关于C++:创建指针的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12103749/