Bonjour,
Je suis sous Microsoft visual C++.
Voila deux lignes de code C++ qui me paraissent simple, à premiere
vue:
CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free
En principe je doit liberer correctement la memoire, mais ce n'est
bigrement pas le cas.
Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?
Merci
Nicolas
CString *dede=new CString("dede"); //creation d'une chaine en ptr. free(dede); //Puis je la libére par un free
Le pendant de new n'est pas free() mais delete qui a l'avantage d'appeler le destructeur.
Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?
Utiliser new avec delete - éventuellement malloc() avec free() en C. Mais en aucun cas mélanger les deux.
-- cns
Luc Hermitte
Cyrille Szymanski wrote in news:slrnckpmf3.b6.cns2 @cns.szym.org:
Le 18-09-2004, nicolas a écrit :
CString *dede=new CString("dede"); //creation d'une chaine en ptr. free(dede); //Puis je la libére par un free
Le pendant de new n'est pas free() mais delete qui a l'avantage d'appeler le destructeur.
Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?
Utiliser new avec delete - éventuellement malloc() avec free() en C. Mais en aucun cas mélanger les deux.
De plus, quel est l'intérêt de créer une chaine de la sorte ? C'est contre-productif. Tout l'intérêt des wrappers qui enveloppent des ressources c'est que l'on n'a plus à gérer manuellement ces ressources.
-- Luc Hermitte
Cyrille Szymanski <cns2@cns.invalid> wrote in news:slrnckpmf3.b6.cns2
@cns.szym.org:
Le 18-09-2004, nicolas <animax@caramail.com> a écrit :
CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free
Le pendant de new n'est pas free() mais delete qui a l'avantage
d'appeler le destructeur.
Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?
Utiliser new avec delete - éventuellement malloc() avec free() en C.
Mais en aucun cas mélanger les deux.
De plus, quel est l'intérêt de créer une chaine de la sorte ? C'est
contre-productif. Tout l'intérêt des wrappers qui enveloppent des
ressources c'est que l'on n'a plus à gérer manuellement ces ressources.
Cyrille Szymanski wrote in news:slrnckpmf3.b6.cns2 @cns.szym.org:
Le 18-09-2004, nicolas a écrit :
CString *dede=new CString("dede"); //creation d'une chaine en ptr. free(dede); //Puis je la libére par un free
Le pendant de new n'est pas free() mais delete qui a l'avantage d'appeler le destructeur.
Pourquoi ? Qu'elle est la methode pour gerer la memoire correctement?
Utiliser new avec delete - éventuellement malloc() avec free() en C. Mais en aucun cas mélanger les deux.
De plus, quel est l'intérêt de créer une chaine de la sorte ? C'est contre-productif. Tout l'intérêt des wrappers qui enveloppent des ressources c'est que l'on n'a plus à gérer manuellement ces ressources.
-- Luc Hermitte
Patrick Philippot
nicolas wrote:
CString *dede=new CString("dede"); //creation d'une chaine en ptr. free(dede); //Puis je la libére par un free
Bonjour,
Il est très rare que l'on ait besoin d'allouer dynamiquement une CString. Cela arrive mais la plupart du temps, on déclare simplement une instance de CString. Cette classe gère en interne les allocations mémoire pour les buffers qui contiennent la chaîne et procède à leur libération au moment de la destruction. Pourquoi se compliquer la vie?
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
nicolas wrote:
CString *dede=new CString("dede"); //creation d'une chaine en ptr.
free(dede); //Puis je la libére par un free
Bonjour,
Il est très rare que l'on ait besoin d'allouer dynamiquement une
CString. Cela arrive mais la plupart du temps, on déclare simplement une
instance de CString. Cette classe gère en interne les allocations
mémoire pour les buffers qui contiennent la chaîne et procède à leur
libération au moment de la destruction. Pourquoi se compliquer la vie?
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
CString *dede=new CString("dede"); //creation d'une chaine en ptr. free(dede); //Puis je la libére par un free
Bonjour,
Il est très rare que l'on ait besoin d'allouer dynamiquement une CString. Cela arrive mais la plupart du temps, on déclare simplement une instance de CString. Cette classe gère en interne les allocations mémoire pour les buffers qui contiennent la chaîne et procède à leur libération au moment de la destruction. Pourquoi se compliquer la vie?
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr