簡體   English   中英

C ++復制對象

[英]C++ copy object

我有一個Game類,其中包含另一個對象GameGrid

Game.h

class Game
{
        public:
            Game(uint32_t GridSize);
        private:
            GameGrid _CurrentGrid;
}

Game.cpp

Game::Game(uint32_t GridSize) : _CurrentGrid(GridSize)
{
}

游戲網格

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;
}

但是此解決方案不起作用,當我更改克隆時,我的原始對象也被更改了。

有人對我有提示嗎?

謝謝!

不要自己創建副本構造函數,而是讓編譯器為您完成,然后只使用對象:

Game MyGame{4};
Game gameClone = MyGame;

這里沒有理由使用原始指針。

我同意@SombreroChicken所說的話。

我只想指出深層副本和淺層副本之間的區別。

如果您的類包含一些指針作為私有成員數據,則必須注意,僅復制指針,而不復制指向的數據。 是我所說內容的深入解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM