L'auto_ptr a des limitations, il faut les connaitre. Un plus gros problème est qu'on ne peut pas les utiliser dans les conteneurs standard.
Tu insistes beaucoup sur les pointeurs intelligents, mais ce n'est pas à ça que je pensais, j'en ai parlé comme solution à envisager si on a besoin de mémoire dynamique, mais je pensais surtout à privilégier la mémoire automatique, et utiliser des références, pas des pointeurs. Ca peut paraitre évident, mais c'est une habitude trop peu répandue (surtout si on a fait du C avant).
Je ne suis pas trop d'accord avec ton exemple de liste avec vector ou autre conteneur : du moins dans l'exemple que tu donnes, on peut tout faire en mémoire automatique. Je ne dis pas qu'il n'y a pas de cas avec vector où il faut utiliser de la mémoire dynamique (avec des pointeurs dans le vecteur par exemple), mais on peut quand même souvent s'en passer. Et en plus la mémoire automatique est plus rapide, et tout se passe bien avec les exceptions...
Je suis bien d'accord que dès qu'il y a de la désallocation explicite à faire, les fuites sont quasi-inévitables. Mais je parle justement d'utiliser des méthodes qui ne nécessitent pas la désallocation : mémoire automatique surtout, pointeurs intelligents s'il faut du dynamique, et dynamique sans pointeurs intelligents en dernier recours, ce qui réduit considérablement les endroits où il y a des désallocations à faire. (Et je ne suis pas d'accord si tu dis que la mémoire automatique c'est laisser au programmeur la gestion de la mémoire. Quand on utilise des pointeurs oui, mais là ce n'est pas le cas)
Si mes souvenirs sont bons, Java ne propose pas de mémoire automatique, on passe toujours par un new ? Si c'est bien le cas, ça me paraît abusif de dire que Java corrige un problème de C++, parce que c'est en partie supprimer quelque chose d'utile et qui ne posait pas de problème. Mais je peux me tromper sur ce point, ou ça a peut-etre été introduit depuis ma dernière utilisation...
[^] # Re: SUN annonce Mad Hatter
Posté par #3588 . En réponse à la dépêche SUN annonce Mad Hatter. Évalué à 2.
Tu insistes beaucoup sur les pointeurs intelligents, mais ce n'est pas à ça que je pensais, j'en ai parlé comme solution à envisager si on a besoin de mémoire dynamique, mais je pensais surtout à privilégier la mémoire automatique, et utiliser des références, pas des pointeurs. Ca peut paraitre évident, mais c'est une habitude trop peu répandue (surtout si on a fait du C avant).
Je ne suis pas trop d'accord avec ton exemple de liste avec vector ou autre conteneur : du moins dans l'exemple que tu donnes, on peut tout faire en mémoire automatique. Je ne dis pas qu'il n'y a pas de cas avec vector où il faut utiliser de la mémoire dynamique (avec des pointeurs dans le vecteur par exemple), mais on peut quand même souvent s'en passer. Et en plus la mémoire automatique est plus rapide, et tout se passe bien avec les exceptions...
Je suis bien d'accord que dès qu'il y a de la désallocation explicite à faire, les fuites sont quasi-inévitables. Mais je parle justement d'utiliser des méthodes qui ne nécessitent pas la désallocation : mémoire automatique surtout, pointeurs intelligents s'il faut du dynamique, et dynamique sans pointeurs intelligents en dernier recours, ce qui réduit considérablement les endroits où il y a des désallocations à faire. (Et je ne suis pas d'accord si tu dis que la mémoire automatique c'est laisser au programmeur la gestion de la mémoire. Quand on utilise des pointeurs oui, mais là ce n'est pas le cas)
Si mes souvenirs sont bons, Java ne propose pas de mémoire automatique, on passe toujours par un new ? Si c'est bien le cas, ça me paraît abusif de dire que Java corrige un problème de C++, parce que c'est en partie supprimer quelque chose d'utile et qui ne posait pas de problème. Mais je peux me tromper sur ce point, ou ça a peut-etre été introduit depuis ma dernière utilisation...