Nous sommes actuellement le 13 Juil 2026, 13:20

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 5 message(s) ] 
Auteur Message
 Sujet du message: auto_ptr, myth ou réalité ?
MessagePublié: 21 Août 2003, 16:40 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Je viens tout juste de découvrir auto_ptr en C++. La gestion des exceptions avec auto_ptr c'est vraiment bien et c'est pourquoi j'ai fait des tests pour l'intégrer dans mes futurs programmes.

Je me suis donc fait un programme avec deux fonctions, une qui devrait faire un memory leak (f_leak) et une autre qui devrait ne pas en faire (f_noleak).

Code :
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#include <memory>
using namespace std;

void f_leak()
{
   int *p = NULL;
   p = new int;

   int a = 2, b = 0, c;
   c = a / b; // cause une exception

   delete p;
}

void f_noleak()
{
   auto_ptr<int> p(new int);

   *p = 100;

   int a = 2, b = 0, c;
   c = a / b; // cause une exception
}

int main()
{
   try
   {
      // essayez avec f_leak et f_noleak
      // f_leak();
      f_noleak();
   }
   catch(...)
   {
   }

   _CrtDumpMemoryLeaks();
}


Selon la description que j'ai lu d'auto_ptr et la compréhension que j'en ai eu, la fonction f_noleak ne devrait pas causer de memory leak, mais elle en cause quand même... Aurais-je mal compris auto_ptr ?

J'utilise Visual Studio.NET


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 22 Août 2003, 10:27 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
J'ai posté la même question sur un autre forum (codeguru) et quelqu'un m'a fait remarquer que le code fonctionne très bien en release ! C'est donc un problème en debug qui, je l'espère, sera corrigé dans les prochaines versions de compilateur.

Malgré le fait que je me suis répondu à moi même, j'espère que certaines personnes auront découvers l'utilité d'auto_ptr en C++.

Pour mieux comprendre :
Code :
#include <afxwin.h>

#include <string>
#include <iostream>
#include <fstream>
#include <memory>
using namespace std;

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

class A
{
public:
   A()
   {
      cout << "Constructeur A()" << endl;
   }
   ~A()
   {
      cout << "Destructeur ~A()" << endl;
   }
};

void f_leak()
{
   A *p = NULL;
   p = new A;

   int a = 2, b = 0, c;
   c = a / b; // cause une exception

   delete p;
}

void f_noleak()
{
   auto_ptr<A> p(new A);

   int a = 2, b = 0, c;
   c = a / b; // cause une exception
}

int main()
{
   try
   {
      // f_leak();
      f_noleak();
   }
   catch(...)
   {
   }
}


La fonction f_leak ne call pas le destructeur alors que la fonction f_noleak le call lors d'une exception. Le tout en release bien sur ! En debug, les deux fonctions cause un memory leak.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 23 Août 2003, 01:41 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 28 Juil 2003, 11:22
Message(s) : 534
Localisation : Beauport,Quebec
J'aimerais TELLEMENT ca savoir de quoi tu parle!! :D :oops: :oops: :lol:

_________________
Your 6 is my 12

Image


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 30 Août 2003, 16:16 
Hors-ligne
Nouvel adepte
Nouvel adepte

Inscription : 07 Oct 2002, 16:37
Message(s) : 51
il a découvert que certaines instructions sont seulement exécuter en release et d'autre en debug.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 02 Sep 2003, 22:52 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
C'est plutôt l'auto_ptr qui est intéressant, mais c'est correct :D


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 5 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site