begin process at 2012 05 27 17:49:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > POINTEUR INTELLIGENT : CLASSE TEMPLATE POUR S'AFFRANCHIR TOTALEMENT DE LA GESTION DE LA MÉMOIRE

POINTEUR INTELLIGENT : CLASSE TEMPLATE POUR S'AFFRANCHIR TOTALEMENT DE LA GESTION DE LA MÉMOIRE


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :smart, pointer, memory leak, delete, new Niveau :Initié Date de création :22/01/2009 Date de mise à jour :14/08/2010 22:51:13 Vu / téléchargé :2 598 / 76

Auteur : cosmobob

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

Cette classe template permet de se débarrasser totalement de la désallocation de pointeurs créés avec new.
Elle maintient en interne un compteur de références du pointeur créé, et possède la responsabilité de le deleter lorsqu'il n'est plus référencé. Il est aussi possible de partager un même objet dans plusieurs parties d'un programme, celui ci sera automatiquement effacé lorsqu'il ne sera plus référencé.

Attention : une utilisation incorrecte peut mener à la destruction multiple du même pointeur et donc à une corruption de la mémoire.
Un smart_ptr devrait TOUJOURS être initialisé directement avec un autre smart_ptr ou bien avec un pointeur créé directement avec new.
[Correct] smart_ptr<int> sp_int = new int(5); smart_ptr<int> sp_int2 = sp_int;
[Incorrect] int* p_int = new int(5); smart_ptr<int> sp_int = p_int; smart_ptr<int> sp_int2 = p_int;
Si un smart_ptr se référence lui même, le pointeur référencé ne sera jamais détruit.

Source

  • // tout est dans le zip
// tout est dans le zip

 Conclusion

En contrepartie de la fiabilité au niveau mémoire que l'utilisation de cette classe procure à un programme complexe, il faut à tout prix respecter le mode d'emploi et ne pas construire un smart_ptr depuis une variable qui contient un pointeur normal, mais directement depuis un pointeur renvoyé par new.
Il ne faut pas utiliser cette classe pour gérer les allocations de tableaux (comme new int[8]), car c'est delete qui est appelé pour effacer l'objet et non pas delete []

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 janvier 2009 21:27:07 :
mise a jour de la description
28 janvier 2009 13:40:33 :
mise a jour description
14 août 2010 22:51:13 :
changement du titre :)

 Sources du même auteur

Source avec Zip Source avec une capture SNIFFER MSN MESSENGER GRACE AU HOOK DES FONCTIONS WINSOCK
Source avec Zip Source avec une capture PORTS ACTIFS : LISTE LES CONNECTIONS TCP ET UDP EN COURS DE ...
Source avec Zip Source avec une capture BIJECTION EXPLICITE ENTRE N ET Q+
Source avec Zip BOT IRC TOUT SIMPLE, FAIT A L'AIDE DE LA CLASSE PROSOCK
Source avec Zip LES SOCKETS C++ COMME DS MIRC : TOUT EST SIMPLE AVEC LA CLAS...

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

METHODE DES TRAPÈZES par ultimatelemagicien
Source avec Zip Source avec une capture TRAVAIL SUR LES CHAINES DE CARATÈRE... SUPPR/COPY/RENAME/DEL... par youpiyoyo

Commentaires et avis

Commentaire de cosmobob le 22/01/2009 20:58:13

chouette hein ? :)

Commentaire de aze555666 le 26/01/2009 17:40:36

Effectivement ça a l'air très chouette. Étant débutant en C++, je ne peux cependant pas en juger.
J'attend les commentaires des "pros" pour savoir ce qu'ils en pensent (autrement dit, y a-t-il des défauts dans ta classe ou peut-on l'utiliser telle quelle tranquillement?)

Commentaire de cosmobob le 26/01/2009 18:34:19

bah tu peux l'utiliser tranquillement sans problème :)

L'intérêt énorme est de pouvoir partager facilement le même pointeur dans plusieurs parties du code (ce qui est toujours ennuyeux, car il faut normalement établir qui a la responsabilité de l'effacer)

la tu t'ennuies pas.
si tu as  :
smart_ptr<int> a = new int(5);
smart_ptr<int> b = a;

tu utilises a et b comme tu veux, si tu mets a = 0, b continue toujours à référencer l'entier 5 (i.e. tu aurais bien *b == 5).

par contre, la mémoire est bien désallouée si tu as par exemple a = 0; b = 0;

++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Utilisation des smart pointer [ par 0xYg3n3 ] Bonjour, J'aurais aime obtenir des exemples sur l'utilisation des pointers fournis par Boost. Et notamment sur les boost::shared_array qui me permett Debug Error sous VC++ [ par iaco71 ] Quand je compile mon programme j'obtiens une jolie erreur Microsoft Visual C++ Debug LibraryDAMAGE :&nbsp;after Normal block ...Je ne l'obtiens plus s new delete quelqun pourrait il m'expliquer simplement ? [ par plhea ] bonjour j'aimerai bien que qqun m'explique l'utilit&#233; de new delete et des destructeurs(les constructeurs je crois avoir compris l'inter&#234;t c' Usage intensif de new et delete ? [ par tintin72 ] Bonjour,J'ai un&nbsp;programme&nbsp;(Windows) qui doit afficher la valeurs des &#233;l&#233;ments d'une liste chain&#233;e mais je ne sais pas quelle Problème avec delete [ par bibiteinfo ] Bonjour, je suis&nbsp;en train de faire un chat.&nbsp; Je lance mon serveur si je connecte un client, j'ai cette ligne l&#224; qui se fait appeler :m_ pointeur,allocation et restitution memoire !! [ par SnOOpss ] Salut ! D&#233;sol&#233; pour le titre qui ne veut rien dire mais je savais pas trop quoi mettre; Je travaille actuellement sur une librairie (id3lib) Delete // new // CObjArray::Add(* CObject) ALORS CA C'EST FORT [ par equimose ] bonsoiraider moi !je comprend pas j'ai un tableau public de CMyLigne :&nbsp;CObArray m_oaLignes dans ma classe CMyCadrillagej'ai une fonction de cette faire une recherche en C++ [ par allthew3 ] Bonjour &#224; tousmerci de m'aider ...Je recherche comment faire une recherche en C++, genre :si un fichier sur le lecteur C: contient le mot "delete c++ et delete [ par anne-lise ] Bonjour !voila, j'ai un probleme lorsque je veux faire des delete sur des tableauz.J'ai une fonction du type :float* function(param, int n){&nbsp;&nbs bound checker & warning au delete [ par magic_Nono ] bj j'aurai souhaiter savoir si qqn utilise Bound Checker (avec Visual C++) et saurai expliquer les Bad Pointer: 0x3B5BF20 passed to global_operator_


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales