Un objet peut-il détruire lui-même?

J'ai un objet qui a besoin de détruire lui-même.

  • Peut-il être fait?

  • Est l'exemple de mal?

    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;
    }
Quel objet est en train de se détruire? FTR, détruisant lui-même serait soit delete this; ou this->~T(); (avec T soit son type). Les deux sont valables, mais nécessitent beaucoup de soins pour être utilisé correctement.
Je ne vois rien de s'auto-détruire dans votre exemple.
Pion supprime lui-même. J'imagine une fois m_board->replace(to, new Queen(m_colour)); a été appelé la fonction void Pion::specialMoves (...) "ne peut pas terminer"
La question a été mal formulé. Le pion appelle une méthode qui, à son tour supprime le pion. Donc, en effet, le pion supprime lui-même.
C'est un très modèle commun dans le code qui implémente la gestion de la mémoire avec le comptage de référence. Count == 0 est harakiri.

OriginalL'auteur danjjl | 2012-03-25