我有一个需要自我毁灭的物体。
可以吗?
示例错了吗?
void Pawn::specialMoves(Coordinate const& from, Coordinate const& to, int passant)
{
/*...*/
m_board->replace(to, new Queen(m_colour));//replace pawn by queen
}
void Board::replace(Coordinate const &to, Piece* newPiece)
{
delete tile[to.x()][to.y()];
tile[to.x()][to.y()] = newPiece;
}
答案 0 :(得分:27)
是的,从成员函数中调用delete this
是合法的。但是非常这很少是一个很好的理由(特别是如果你正在编写惯用的C ++,其中大多数内存管理任务应该委托给容器,智能指针等)。
你需要非常小心:
new
动态分配的(不是new[]
)。答案 1 :(得分:8)
答案 2 :(得分:2)
是的,它应该有效。即使delete this;
也是允许的。
但是调用specialMoves()
的代码可能会让人感到非常惊讶。
答案 3 :(得分:1)
问:一个物体可以自行毁灭吗?
答:好的。 “删除这个”是COM / ActiveX中流行的习语
就你的算法而言,我建议:
“board”对象有“tiles”。也许只是一个简单的二维阵列。
你从n“件”开始
某些控制器(可能是“游戏”对象)相对于“瓷砖”移动“片段”。
每个“图块”都引用0或1“件”
我不确定我是否有理由在每次移动的基础上创建或删除任何内容。
... IMHO
答案 4 :(得分:0)
只要在调用销毁对象后不访问成员变量或this
指针,就应该没问题。因为看起来你没有做这些事情,所以这个例子应该可行。