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
我创建的对象?
如上所述,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)