【发布时间】:2019-01-24 13:54:33
【问题描述】:
我有一个类Game,其中包含另一个对象GameGrid:
游戏.h
class Game
{
public:
Game(uint32_t GridSize);
private:
GameGrid _CurrentGrid;
}
游戏.cpp
Game::Game(uint32_t GridSize) : _CurrentGrid(GridSize)
{
}
GameGrid.h
class GameGrid
{
public:
GameGrid(uint32_t GridSize);
void setGrid(const Grid& Grid);
const GameGrid::Grid getGrid(void) const;
private:
Grid _Grid;
}
GameGrid.cpp
GameGrid::GameGrid(uint32_t GridSize)
{
uint32_t i = 0;
uint32_t j = 0;
_Grid.assign(GridSize, std::vector<unsigned int>(GridSize));
for (i = 0; i < GridSize; i++)
{
for (j = 0; j < GridSize; j++)
{
_Grid.at(i).at(j) = 0;
}
}
}
void GameGrid::setGrid(const GameGrid::Grid& Grid)
{
_Grid = Grid;
}
const GameGrid::Grid GameGrid::getGrid(void) const
{
return _Grid;
}
现在我有了我的应用程序,它使用了游戏类
Game* MyGame = new Game(4);
如何为这个指向游戏对象的指针创建一个复制函数,以便我可以克隆该对象。
我已经用赋值运算符试过了
Game& operator=(Game const& Ref);
Game& Game::operator=(Game const& Ref)
{
if (&Ref != this)
{
this->~Game2048();
new (this) Game2048(Ref);
}
return *this;
}
但是这个解决方案不起作用,当我更改克隆时,我的原始对象也发生了变化。
有人给我提示吗?
谢谢!
【问题讨论】:
-
您将克隆设置为对原始网格的引用,这就是您看到它更改原始网格的原因。如果您需要复制原件但保护原件不被更改,请按值复制而不是引用。
-
1) 为什么需要在显示的代码中使用指针? 2)复制构造函数用于复制对象..
-
'Game2048' 在 Game.h 中无效,可能是拼写错误,请编辑
-
我感觉你所有的问题都是从使用
new开始的。你为什么使用new?编译器生成的拷贝构造函数有什么问题? -
this->~Game2048();这一行对我来说非常可疑,实际上应该永远不必直接调用析构函数,更不用说this
标签: c++