C++拷贝对象

Kam*_*mpi 0 c++

我有一个Game包含其他对象的类GameGrid:

Game.h

class Game
{
        public:
            Game(uint32_t GridSize);
        private:
            GameGrid _CurrentGrid;
}
Run Code Online (Sandbox Code Playgroud)

Game.cpp

Game::Game(uint32_t GridSize) : _CurrentGrid(GridSize)
{
}
Run Code Online (Sandbox Code Playgroud)

GameGrid.h

class GameGrid
{       
        public:
            GameGrid(uint32_t GridSize);
            void setGrid(const Grid& Grid);
            const GameGrid::Grid getGrid(void) const;
        private:
            Grid _Grid;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

现在我有我的应用程序,它使用游戏类

Game* MyGame = new Game(4);
Run Code Online (Sandbox Code Playgroud)

如何为这个指向Game-Object的指针创建一个复制函数,以便我可以克隆该对象.

我已经尝试过赋值运算符

Game& operator=(Game const& Ref);

Game& Game::operator=(Game const& Ref)
{
    if (&Ref != this)
    {
        this->~Game2048();
        new (this) Game2048(Ref);
    }

    return *this;
}
Run Code Online (Sandbox Code Playgroud)

但是当我更改克隆时,这个解决方案不起作用,我的原始对象也发生了变化.

有人对我有暗示吗?

谢谢!

Som*_*ken 6

不要自己创建复制构造函数,让编译器为您完成,然后只使用对象:

Game MyGame{4};
Game gameClone = MyGame;
Run Code Online (Sandbox Code Playgroud)

这里没有理由使用原始指针.

  • 如果没有必要,@ Kampi将来不会使用指针.永远不要使用`new`.使用智能指针,向量或对象. (4认同)