auto_ptr quand et comment l'utiliser ? - C++ - Programmation
Marsh Posté le 02-09-2005 à 12:57:53
ou autrement, comment l'utiliser
Code :
|
et c'est grosso modo tout ce que tu peux faire avec. Le design de auto_ptr<> ne suit pas la règle de "The Least Surprise"
Code :
|
utilise boost::shared_ptr<>
Marsh Posté le 02-09-2005 à 14:32:55
C'est incompatible avec les tableaux aussi.
http://c.developpez.com/faq/cpp/?p [...] RS_autoptr
Marsh Posté le 02-09-2005 à 14:40:45
Très pratique pour la gestion de ressources qui doivent être rendues (pour faire une classe fichier, port, etc).
Marsh Posté le 02-09-2005 à 15:08:03
Je viens de capter.
auto_ptr libere la memoire des que l'on sort du "scope"
A un moment je pensais qu'il y avait un compteur de references et donc que ca s'utilisait comme les references en Java.
bref si c'est juste pour remplacer:
{
new ...
...
delete
}
par
{
auto_ptr<...
...
}
Je ne vois presque aucun interet en fait, je comprends pourquoi personne n'utilise ca.
Marsh Posté le 02-09-2005 à 16:29:23
l'effet c'est que si t'as une exception qui part ou un return / break / continue dans ton block, t'évites une fuite
Marsh Posté le 02-09-2005 à 16:47:03
Citation : auto_ptr libere la memoire des que l'on sort du "scope" |
C'est le principe du RAII. C'est beau, c'est fiable, c'est propre.
Citation : A un moment je pensais qu'il y avait un compteur de references et donc que ca s'utilisait comme les references en Java. |
auto_ptr ne fait pas du comptage de référence (shared_ptr oui), mais possède une sémantique de déplacement. Ca peut induire en erreur, mais dans les cas où ça convient, c'est sans surcoût (car le compteur faut le stocker quelque part...), et donc pas si mal. Il a donc son utilité.
Car écrire du code qui ne leak pas est beaucoup plus dur qu'il n'y parrait. Comme l'a dit Taz, ton code n'est pas exception safe. Pour qu'il le soit:
Code :
|
auto_ptr transfome tout celà en une seule ligne.
Marsh Posté le 02-09-2005 à 17:34:52
mais exception ou pas, c'est du RAII. quelque soit le chemin de ton code, tu as l'assurance que ton objet/ressource sera détruite.
Marsh Posté le 02-09-2005 à 20:10:53
Au passage, RAII = "Resource Acquisition Is Initialization"
http://gethelp.devx.com/techtips/c [...] in1101.asp
http://www.devx.com/cplus/10Minute [...] 7/0/page/1
http://gethelp.devx.com/techtips/c [...] in1199.asp
Marsh Posté le 05-09-2005 à 14:44:57
et ben merci bien pour toutes ces infos. Ca me fait de la lecture en perspective
Marsh Posté le 02-09-2005 à 12:38:59
Pour ceux qui ne connaissent pas auto_ptr:
http://www.gotw.ca/publications/us [...] tively.htm
Je me pose la question toute bete, dans quel cas est-il encore necessaire d'utiliser le classique new plutot que auto_ptr ? A quel moment ne faut-il pas utiliser auto_ptr ? quels sont les cas ou auto_ptr ne doit pas etre utilise ?
voili voilou