La façon dont je pense, c'est que toutes les ressources doivent être la propriété de quelque chose. Le propriétaire est la personne qui est responsable du nettoyage. Habituellement, ce propriétaire est un pointeur intelligent d'une certaine sorte, mais même std::vector est un propriétaire d'une ressource: le bloc de mémoire qui stocke il est limitrophe des éléments. Ce conseil ne vaut pas seulement pour la mémoire, mais toutes les ressources, telles que les descripteurs de fichiers, base de données gère, mutex, etc...
Lorsque vous appelez nouveau et supprimer manuellement dans une partie de votre code qui n'est pas une classe wrapper, vous le programmeur devenir le propriétaire de la ressource. La propriété s'accompagne de la responsabilité de nettoyage après vous. Maintenant, vous et l'ensemble de la maintenance des programmeurs qui viennent après vous avoir pour s'assurer que tous les chemins de code après la nouvelle, éventuellement, conduire à une suppression. Même pour de simples fonctions, cela est très facile de se tromper. Avec des exceptions, presque impossible à moins que vous soigneusement envelopper le tout dans des blocs try catch, entraînant les performances d'exécution des peines et de polluer votre code supplémentaire étendues et inutile logique d'exception. Enfin, même si vous ne l'obtenez à droite, vous venez de perdre votre temps à faire ce travail fastidieux de la gestion des ressources. Le compilateur est l'outil qui peut faire ce travail pour vous, utilisez-le.
La pire situation est lorsque certains sous-système alloue une ressource, elle est passée autour de l'application, et quelques autres, loin du sous-système de la libère. Le nombre de chemins de code possible dans cette situation est insoluble. Il est très difficile, si pas impossible pour un être humain de comprendre et de confiance. À mon avis, ce style de programmation est difficile à maintenir. Combien de projets C avez-vous travaillé dans le passé qui sont truffées d'erreurs de mémoire, en particulier sur rarement, voire jamais exécuté erreur de manipulation des chemins? J'ai fait affaire avec plus de soins, je verrai plus.
C a manuel de gestion de la mémoire, Java et d'autres ont la collecte des ordures. C++ a RAII. Il est aussi efficace comme le C et le et presque aussi sûr que la collecte des ordures.
Ma règle est simple, si vous trouvez vous-même manuellement le nettoyage de toute ressource, vous avez écrit un bug.