一个物体可以自我毁灭吗?

dan*_*jjl 13 c++ object destroy

我有一个需要摧毁自己的物体.

  • 可以吗?

  • 这个例子错了吗?

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

Oli*_*rth 29

是的,delete this从成员函数内部调用是合法的.但有非常很少一个很好的理由这样做(尤其是如果你正在写成语C++大部分内存管理工作应委托给容器,智能指针,等等).

你需要非常小心:

  • 必须通过new(非new[])动态分配自杀对象.
  • 一旦一个对象自杀了,它就是未定义的行为,它做任何依赖于它自己的存在的东西(它不能再访问它自己的成员变量,调用它自己的虚函数等).