如何删除我创建的这个对象?

Aus*_*ore 0 c++ new-operator delete-operator

以此程序为例:

class Piece
{
public:
    Piece(bool color);

protected:
    bool color;
};

Piece::Piece(bool color)
{
    this->color = color;
}

//-----------------------------

class King : public Piece
{
public:
    King(bool color);
};

King::King(bool color) : Piece(color)
{
    // empty
}

//-----------------------------

class Tile
{
public:
    // constructors/destructors
    Tile(Piece * ppiece, int rrow, int ccol);
    ~Tile();

private:
    Piece * piece;
    int row, col;

};

Tile::Tile(Piece * ppiece, int rrow, int ccol)
{
    this->ppiece = piece;
    this->row = rrow;
    this->col = ccol;
}

//---------------------------

int main() 
{
    Tile * tile = new Tile(new King(0), 1, 1);
}
Run Code Online (Sandbox Code Playgroud)

在函数中,main()我声明一个new King并将其传递给Tile构造函数.如何删除King我创建的对象?

abe*_*nky 5

如上所述,Tile Constructor接收新的King作为参数ppiece.

然后,Tile构造函数不对ppiece执行任何操作,并且无法释放内存.它被"泄露"了.

鉴于Tile有会员piece,我建议在那里分配:

Tile::Tile(Piece * ppiece, int rrow, int ccol)
{
    this->row = rrow;
    this->col = ccol;
    this->piece = ppiece;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在Tile析构函数中释放它:

Tile::~Tile()
{
    delete piece;
}
Run Code Online (Sandbox Code Playgroud)