IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

delete char *


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par d�faut delete char *
    Bonjour � tous et merci de prendre du temps pour mon probl�me

    En fait j'aimerais savoir si il est n�cessaire de faire un delete sur une variable du type :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    static char* aa = new char[256]
    Cette variable est d�finie au d�but du programme et est utilis�e dans tous le programme.

    Si il est n�cessaire de faire un delete, comment dois je le faire et ou dans le programme??

    Merci de vos r�ponse

  2. #2
    Membre �prouv�
    �tudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Par d�faut
    Comme elle est static �a ne sert effectivement � rien. Mais attention, si c'est une classe qui est allou�e dynamiquement tu vas devoir faire en sorte que le destructeur soit appel�.

    Mais dans ton cas, pourquoi faire une alloc' dynamique ? Un simple static char aa[256]; aurait suffit.

  3. #3
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    un delete, certainement pas, mais un delete[], oui, par principe .

    Cela dit, pourquoi une allocation dynamique ?

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    A l'instar de white_tentacle, je me pose r�ellement la question de la raison qui te pousse � recourir � l'allocation dynamique (sans compter le fait que l'on puisse se poser la question de la raison qui te pousse � cr�er une variable globale statique... mais c'est peut etre un autre d�bat )

    Tout comme lui, j'estime, par principe que tout new ou new[] doit avoir son delete ou delete[] �quivalent.

    Celui permettant de lib�rer la m�moire r�serv�e � ta variable statique devrait donc prendre place le plus pr�s possible du return final (celui de main()), mais bien �videmment avant qu'il (le return final) ne survienne.

    Ceci dit, il est effectivement vrai que toutes les ressources (y compris celles pour lesquelles on a allou� dynamiquement de la m�moire) sont (sens�es �tre) lib�r�es automatiquement par le syst�me lorsque l'application se ferme, mais voil�, il y a un mais (deux mais m�me)...

    le premier mais prend la forme de
    Mais tous les syst�mes ne le font pas ou pas forc�ment correctement:
    Qui n'a en effet jamais subit le probl�me d'un fichier "verrouill�" par une application qui s'est termin�e (plus ou moins correctement) il y a d�j� un temps ceertain

    Le deuxi�me mais a d�j� �t� abord�: par principe, tout ph�nom�ne d'allocation dynamique doit �tre contrebalanc� par le ph�nom�ne ad�quat de lib�ration de la m�moire...

    Ne pas le faire pour une variable statique sous pr�texte que le syst�me est sens� s'en occuper a de quoi heurter ce principe
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  5. #5
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Tout comme lui, j'estime, par principe que tout new ou new[] doit avoir son delete ou delete[] �quivalent.
    Je suis globalement en accord avec cette r�gle.

    La seule exception que j'ai pu y trouver, et elle est rare, c'est quand on fait un petit utilitaire en ligne de commande, destin� � �tre appel� de nombreuses fois par un script, et pour lequel il s'agit d'optimiser le temps de descente du processus en faisant tout d�sallouer en bloc � l'OS, plut�t que de d�sallouer soi m�me petits bouts par petits bouts (apr�s mesure bien entendu que du temps est pass� � �a).
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Par d�faut
    Youpi, j'ai tout plein de r�ponse. Tout d'abord merci beaucoup pour ses r�ponses.

    Donc j'ai bien pris note de vos conseils et je vais donc abandonner l'allocation dynamique et faire un :

    Tant que j'y suis, je sais pas si cette question peut �tre pos�e ici mais je tente. Dans mon programme que je code avec "visual c++", j'utilise des gcnew par exemple comme ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    String^ nom_matiere;
    string keyvalue;
    nom_matiere = gcnew String(keyvalue.c_str());
    Ce que j'aimerais savoir c'est est ce qu'il est utile de lib�rer la m�moire lorsque l'on fait ceci et si oui qu'elle est la marche � suivre????
    Merci pour vos r�ponse....

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Manifestement, tu fais du C++/CLI. Je n'en ai jamais fait, mais je suppose que gcnew signifie garbage collected new, et que donc, tu n'as pas besoin de faire de delete explicite.

    Par contre, m�fie-toi, tu ne sauras pas quand est appel� le destructeur dans ce cas (c'est le runtime qui s'en occupe). Pas g�nant pour un std::string, mais pour d'autres objets...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 02/07/2003, 16h24
  2. [PostgreSql] Probl�me de cadreage de char !!!
    Par moipastoi dans le forum Requ�tes
    R�ponses: 3
    Dernier message: 08/05/2003, 18h01
  3. [langage] delete de fichier
    Par lolive dans le forum Langage
    R�ponses: 2
    Dernier message: 24/04/2003, 15h04
  4. R�ponses: 6
    Dernier message: 24/03/2003, 17h11
  5. Traitement d'un char* renvoy� par une DLL en C++
    Par LuluTchab dans le forum Langage
    R�ponses: 4
    Dernier message: 22/03/2003, 21h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo