Est-il une raison pour appeler delete en C++ lorsqu'un programme est de sortir de toute façon?

Dans mon C++ main fonction, par exemple, si j'avais un pointeur vers une variable qui utilise la mémoire du tas (par opposition à la mémoire de pile) - est-ce automatiquement libéré après mon application se ferme? Je suppose que oui.

Même ainsi, il est de bonne pratique de toujours supprimer les allocations de tas, même si vous pensez qu'ils ne seront jamais utilisés dans une situation où la mémoire est automatiquement libéré à la sortie?

Par exemple, quel est l'intérêt de faire cela?

int main(...)
{
    A* a = new A();
    a->DoSomething();
    delete a;
    return 0;
}

Je pensais peut-être dans le cas où je refactoriser (ou quelqu'un d'autre refactors) que le code et le met ailleurs dans la demande, où delete est vraiment neccecary.

Ainsi que la réponse de Brian R. Bondy (qui parle spécifiquement sur les implications en C++), Paul Tomblin a aussi un la bonne réponse à une question spécifique C, qui parle aussi le destructeur C++.

  • Le duplicata est mentionné sur le C, qui passe à côté de certaines informations importantes sur le destructeur qui est un problème en C++.
  • ma réponse à la double mentionne également les destructeurs (maintenant). J'ai le sentiment que celui-ci devrait être supprimé est toujours debout.
  • Pas sûr de ce que tu veux dire à propos de destructeur - veuillez préciser.
  • Fondamentalement, la question a une réponse différente pour le C et le C++. En C++, vous devez aussi considérer qu'il y a encore plus de raison de le supprimer de votre mémoire, dans votre programme, car si vous n'avez pas votre destructeur de votre classe ne sera pas appelé. Qui peuvent contenir de très important code.
  • Ah, bon point. Je pense que ma question a également fait le point de "devrais-je supprimer de toute façon, de bonnes pratiques?" - pas seulement "devrais-je supprimer lors de la sortie?".
  • Tomblin: Mais la question, c'est la seule taggés avec, et ne demande qu'à propos de C. Donc votre réponse je pense, est plus adapté ici. Si l'autre question posée sur le C/C++ alors je dirais que votre réponse doit être accepté là-bas si.
  • Ok, vous m'avez convaincu. Mais j'aime toujours ma réponse à cette autre question mieux.
  • A a = new A(); est pas valide en C++.

InformationsquelleAutor Nick Bolton | 2009-03-24