Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2056 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  auto_ptr quand et comment l'utiliser ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

auto_ptr quand et comment l'utiliser ?

n°1190360
tanguy
Posté le 02-09-2005 à 12:38:59  profilanswer
 

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

mood
Publicité
Posté le 02-09-2005 à 12:38:59  profilanswer
 

n°1190374
Taz
bisounours-codeur
Posté le 02-09-2005 à 12:57:53  profilanswer
 

ou autrement, comment l'utiliser

Code :
  1. {
  2. auto_ptr<X> px(new X);
  3. //
  4. px->z();
  5. }


 
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 :
  1. auto_ptr<X> a, b;
  2. a = new X;
  3. b = a;
  4. a->z(); // boom !


 
utilise boost::shared_ptr<>

n°1190444
HelloWorld
Salut tout le monde!
Posté le 02-09-2005 à 14:32:55  profilanswer
 

C'est incompatible avec les tableaux aussi.
http://c.developpez.com/faq/cpp/?p [...] RS_autoptr


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1190453
el muchach​o
Comfortably Numb
Posté le 02-09-2005 à 14:40:45  profilanswer
 

Très pratique pour la gestion de ressources qui doivent être rendues (pour faire une classe fichier, port, etc).


Message édité par el muchacho le 02-09-2005 à 14:41:58
n°1190500
tanguy
Posté le 02-09-2005 à 15:08:03  profilanswer
 

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.

n°1190655
Taz
bisounours-codeur
Posté le 02-09-2005 à 16:29:23  profilanswer
 

l'effet c'est que si t'as une exception qui part ou un return / break / continue dans ton block, t'évites une fuite

n°1190685
HelloWorld
Salut tout le monde!
Posté le 02-09-2005 à 16:47:03  profilanswer
 

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.
[...]
Je ne vois presque aucun interet en fait, je comprends pourquoi personne n'utilise ca.


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 :
  1. A * a = new A;
  2. try
  3. {
  4.      // ...
  5. }
  6. catch ( ... )
  7. {
  8.     delete a;
  9.     throw;
  10. }
  11. delete a;


auto_ptr transfome tout celà en une seule ligne.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1190753
Taz
bisounours-codeur
Posté le 02-09-2005 à 17:34:52  profilanswer
 

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.

n°1190867
el muchach​o
Comfortably Numb
Posté le 02-09-2005 à 20:10:53  profilanswer
 

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


Message édité par el muchacho le 02-09-2005 à 20:15:24
n°1192317
tanguy
Posté le 05-09-2005 à 14:44:57  profilanswer
 

et ben merci bien pour toutes ces infos. Ca me fait de la lecture en perspective


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  auto_ptr quand et comment l'utiliser ?

 

Sujets relatifs
Comment utiliser un fichier se trouvant dans l'explorateur de solutionComment utiliser un timer en parallèle?
Utiliser un contrôleur IDE, des disques IDELibrairie GD : utiliser imagepng() sans faire un header ? [résolu]
Utiliser du VBS sous PHPConcours Auto Taxi Driver de Coder-Studio.com
utiliser PL/SQL dans un programme javautiliser un objet ocx
Ouverture auto et simultanée d'une page et d'un pdfQuel est la syntaxe pour utiliser les variables dans une fonction
Plus de sujets relatifs à : auto_ptr quand et comment l'utiliser ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR