Gestion de memoire automatique en c++

Contenu du snippet

ce source peut etre utiliser en gestion de memoire automatiquement
il faut utiliser la class IObject comme une class mere et la template GsMem
en peut utiliser le Macro suivant pour simplifier les chose

#define SET_AUTO_MEM(name) typedef GsMem<name> name#$;

Source / Exemple :


// le fichier de base
// base.h
#include <stdio.h>

class IObject {
public:
int count;
Object() : count(0) {}
virtual ~Object() {}
friend int addRef(IObject * obj);
friend int release(IObject * obj);
};

int addRef(IObject * obj) {
if(obj==0) return 0;
return obj->count++;
}

int release(IObject * obj){
if (obj==0) return 0;
obj->count--;
if(obj->count<=0){
delete obj;
return 0;
}
return obj->count ;
}

template <class T>
class GsMem {
public:
T * obj ;
GsMem(T * oobj) {
if(oobj){
   obj = oobj;
   addRef(obj);
}
obj = 0;
}

virtual ~GsMem() {
release(obj);
}

GsMem & operator=(IObject * oobj) {
if(oobj) {
   if (obj) {
       release(obj);
       obj = oobj ;
       addRef(obj);
   }
   else {
       obj = oobj ;
       addRef(obj);
   }
else {
   if(release(obj)<=0) obj=0;
}
}

};

// fichier .cpp

#include "base.h"

class Test : public IObject {
public:
    int cd ;
    Test(int code) {
        cd = code ;
        printf("creation de l'objet %d\n",code);
    }
    virtual ~Test() {
        printf("destruction de l'objet %d\n",cd);
    }

};

int main() {
     printf("exemple 1 : (sans utilisation du GsMem)\n");
    {
         Test * t = new Test(1) ;
    }
    printf("exemple 2 : (utilisation du GsMem au declaration)\n");
    {
         GsMem<Test> t = new Test(2) ;
    }

    printf("exemple 3 : (utilisation du GsMem )\n");
    {
         Test * t = new Test(3) ;
         GsMem<Test> gs = t ;
    }

   return 0 ;
 
}

Conclusion :


affichage:

exemple 1 : (sans utilisation du GsMem)
creation de l'objet 1
exemple 2 : (utilisation du GsMem au declaration)
creation de l'objet 2
destruction de l'objet 2
exemple 3 : (utilisation du GsMem )
creation de l'objet 3
destruction de l'objet 3

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.