• [^] # Re: SUN annonce Mad Hatter

    Posté par . En réponse à la dépêche SUN annonce Mad Hatter. Évalué à 1.

    « Oui mais dès que tu as besoin d'instancier des classes tu utilises l'opérateur new et donc l'allocation dynamique (oui on peut parfaitement utiliser la pile et non la heap mais la pile n'est pas vraiment faite pour les objets donc on fait rarement de cette façon). On fait de l'objet ne l'oublions pas donc l'objectif est d'utiliser des classes. »

    Et tu les utilises très bien avec de la mémoire automatique, c'est la méthode normale, faire du dynamique c'est uniquement si on ne peut pas faire autrement. La pile convient très bien.

    « Pour reprendre mon exemple, mes comptes ce sont évidemment des objets (ce n'était peut-être pas très clair) qui contiennent des informations relatives à chaque compte et à chaque nouveau compte récupéré j'instancie mon objet compte que je place dans un vector (de pointeurs à cause des objets que je mets dedans) »

    C'était clair que c'était des objets, mais tu ne dis pas pourquoi tu utilises des pointeurs, ce n'est pas une obligation. Rien ne t'empêche de mettre tes objets nouvellement créés directement dans ton vector, sans passer par des pointeurs. Ou alors il y a une raison qui t'en empeche, mais celle-là tu ne l'as pas explicitée.

    « Compte *l_compte = new Compte;
    l_compte->changerProprietaire(nom);
    //d'autres trucs ici
    delete l_compte;

    Si ma fonction lève une exception je ne passe pas au niveau du delete et mon pointeur n'est jamais libéré. »


    {
    Compte l_compte() ;
    l_compte.changerProprietaire(nom);
    // d'autres trucs ici
    }

    Que cette manière de faire ne convienne pas toujours, ok, mais dans le cas de ton exemple, je ne vois rien qui l'empeche.

    « Tu inclus d'ailleurs dans ton raisonnement l'utilisation de pointeurs intelligents comme un "best pratice" pour faire du code sûr mais tout ça ce n'est en quelque sorte que du "bricolage" par rapport à ce qui est fait en Java ... c'est un peu comme dire qu'on peut faire de l'objet en C ... oui on peut mais ce n'est pas spécialement pensé pour. C'est la même chose avec le C++. »

    Un pointeur intelligent là ou on pouvait utiliser de la mémoire automatique, c'est pas une « best practice » :) , à moins d'être très à l'aise avec ces derniers, personnellement j'éviterais. Les pointeurs intelligents je ne les indiquais que comme possibilités à envisager, j'insistais beaucoup plus sur la mémoire automatique. Ca ne parait vraiment pas plus « bricolage » qu'un « design pattern » quelconque, qu'un ramasse-miette, ou d'autres choses, le tout est de connaître l'outil qu'on utilise.

    « Des variables ont des portées de bloc ou de méthode en Java aussi, elle n'ont pas le même scope et les variables locales sont aussi détruites en fin de bloc donc en ça, Java a aussi une gestion de la mémoire automatique. Java n'utilise pas de pointeurs mais des références et le new n'empêche pas de disposer d'une mémoire automatique. »

    Ma question c'est : ces variables locales peuvent-elles être des instances de classe, et alors leur constructeur et la libération de mémoire est-elle faite à la fin du bloc ? Évidemmnent si j'ai parlé de pointeurs en Java il s'agit de références, ça va sans dire...