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++ Discussion :

Question de java-iste: Pourquoi un pointeur plutôt que rien?


Sujet :

C++

  1. #1
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut Question de java-iste: Pourquoi un pointeur plutôt que rien?
    Bonjour!

    Je me permets de poser cette sempiternelle question car malheureusement jusqu'ici je n'ai personnellement toujours pas trouvé de réponse qui me convenait (faut dire que je suis un peu neuneu des fois...).

    Je tiens tout d'abord à préciser que j'ai appris la programmation orientée objet avec Java, qui est je pense (comme tout le monde ici?) un excellent langage d'apprentissage. Et j'en ai suffisamment fait pour que je puisse dire sans forfanterie que j'en fais ce que je veux. Or dans ce langage il n'y a pas de notion de pointeur.

    Le pointeur est donc quelque chose de nouveau pour moi. J'ai donc regardé pas mal de tutos, dont le livre de Bruce Eckel "Penser en c++" dispo en français sur ce site (merci!!), un support de cours par Henri Garreta (très bien) ainsi qu'un tuto dispo ici (les pointeurs de C et du C++, par CGI, très bien aussi). J'ai pas encore fini le bouquin d'Eckel, mais j'ai déjà dépassé le chapitre sur les pointeurs. J'ai lu les autres.
    Or malgré ma bonne (excellente je devrais dire) volonté, je n'ai toujours rien capté.
    J'ai très bien compris ce qu'est un pointeur (et par extension, une référence): C'est une adresse/variable particulière où l'on stocke l'adresse d'une autre variable.
    J'ai très bien compris aussi que cela permet, entre autres, de travailler sur la variable elle-même et non sur une copie quand on passe cette variable dans les paramètres d'une méthode. Je sais aussi qu'il peut s'avérer utile dans l'utilisation des tableaux.
    Toutefois, je me pose quelques questions:
    - Pour le passage de la variable dans les paramètres d'une méthode, il existe une méthode toute aussi efficace, le référencement. Exemple:
    void maMethode(int &a);
    L'utilisateur se contente d'utiliser cette méthode en mettant le nom de sa variable, et la méthode utilise automatiquement cette variable et non une copie. Alors pourquoi vouloir garder en mémoire des pointeurs, genre:
    int *maVar = a; // Why?
    Est-ce que cela permet au programme d'être plus rapide? Paske fondamentalement au lieu d'avoir une seule variable (a) on en a 2 (maVar, a). Ou bien cela permet d'accéder à certaines variables partout dans l'application, de n'importe quelle classe (mais dans ce cas, pourquoi ne pas rendre la variable statique, comme en Java?).
    - On peut avoir aussi un référencement de méthode dans un pointeur (je me trompe?). Là, dans ce cas je ne comprends pas pourquoi.

    Autre point plus délicat. J'ai déjà regardé certaines sources, pour voir ce que j'arrivais déjà à déchiffrer. Or j'ai vite remarqué une chose: les habitudes des programmeurs comptent beaucoup dans la manière et la fréquence d'utilisation des pointeurs. J'ai ainsi vu certaines choses étranges, comme des méthodes avec que des pointeurs, sauf une ou deux variables 'standard' alors que rien n'aurait empêché à priori d'utiliser des pointeurs à la place (le pointeur est une variable comme les autres...). Bref:
    - Si une bonne âme pouvait m'indiquer un bouquin/site/pdf/tuto (en français si possible) sur les bonnes habitudes à prendre pour programmer... Je sais que des choses existent ici, mais je voulais avoir aussi des conseils de pros/profs (si vous avez le temps). Car il existe pleins de tutos sur la programmation, mais des fois les exemples donnés ne sont pas écrits d'une manière élégante (pour ne pas dire à l'arrach'...) et je voudrais apprendre bien tout de suite. Car une fois que j'ai assimilé une méthode, en changer est beaucoup plus dur. Et je ne parle pas des tutos qui décrivent des exemples... pour ensuite expliquer que c'était juste pour être pédagogique mais qu'en fait dans la vraie vie on n'utiliserait pas de pointeur dans ce cas précis... Comment voulez-vous vous y retrouver dans ces conditions?
    - Si quelqu'un pouvait aussi m'expliquer en quelques lignes et phrases percutantes la philosophie et les règles de base pour utiliser ou non des pointeurs ce serait encore mieux, il aurait droit alors à ma reconnaissance éternelle.

    En tout cas, merci à ceux qui ont eu le courage de lire jusqu'au bout ma prose.
    Teto.

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 293
    Par défaut
    Citation Envoyé par Teto45 Voir le message
    a- Je tiens tout d'abord à préciser que j'ai appris la programmation orientée objet avec Java, qui est je pense (comme tout le monde ici?) un excellent langage d'apprentissage.

    b- Et j'en ai suffisamment fait pour que je puisse dire sans forfanterie que j'en fais ce que je veux. Or dans ce langage il n'y a pas de notion de pointeur.

    c- J'ai très bien compris ce qu'est un pointeur (et par extension, une référence): C'est une adresse/variable particulière où l'on stocke l'adresse d'une autre variable.
    J'ai très bien compris aussi que cela permet, entre autres, de travailler sur la variable elle-même et non sur une copie quand on passe cette variable dans les paramètres d'une méthode. Je sais aussi qu'il peut s'avérer utile dans l'utilisation des tableaux.


    Toutefois, je me pose quelques questions:
    d- Pour le passage de la variable dans les paramètres d'une méthode, il existe une méthode toute aussi efficace, le référencement. Exemple:

    e- L'utilisateur se contente d'utiliser cette méthode en mettant le nom de sa variable, et la méthode utilise automatiquement cette variable et non une copie. Alors pourquoi vouloir garder en mémoire des pointeurs, genre:

    Est-ce que cela permet au programme d'être plus rapide? Paske fondamentalement au lieu d'avoir une seule variable (a) on en a 2 (maVar, a). Ou bien cela permet d'accéder à certaines variables partout dans l'application, de n'importe quelle classe (mais dans ce cas, pourquoi ne pas rendre la variable statique, comme en Java?).

    f- On peut avoir aussi un référencement de méthode dans un pointeur (je me trompe?). Là, dans ce cas je ne comprends pas pourquoi.

    g- Autre point plus délicat. J'ai déjà regardé certaines sources, pour voir ce que j'arrivais déjà à déchiffrer. Or j'ai vite remarqué une chose: les habitudes des programmeurs comptent beaucoup dans la manière et la fréquence d'utilisation des pointeurs. J'ai ainsi vu certaines choses étranges, comme des méthodes avec que des pointeurs, sauf une ou deux variables 'standard' alors que rien n'aurait empêché à priori d'utiliser des pointeurs à la place (le pointeur est une variable comme les autres...). Bref:

    h- Si une bonne âme pouvait m'indiquer un bouquin/site/pdf/tuto (en français si possible) sur les bonnes habitudes à prendre pour programmer... Je sais que des choses existent ici, mais je voulais avoir aussi des conseils de pros/profs (si vous avez le temps). Car il existe pleins de tutos sur la programmation, mais des fois les exemples donnés ne sont pas écrits d'une manière élégante (pour ne pas dire à l'arrach'...) et je voudrais apprendre bien tout de suite. Car une fois que j'ai assimilé une méthode, en changer est beaucoup plus dur. Et je ne parle pas des tutos qui décrivent des exemples... pour ensuite expliquer que c'était juste pour être pédagogique mais qu'en fait dans la vraie vie on n'utiliserait pas de pointeur dans ce cas précis... Comment voulez-vous vous y retrouver dans ces conditions?

    i- Si quelqu'un pouvait aussi m'expliquer en quelques lignes et phrases percutantes la philosophie et les règles de base pour utiliser ou non des pointeurs ce serait encore mieux, il aurait droit alors à ma reconnaissance éternelle.

    En tout cas, merci à ceux qui ont eu le courage de lire jusqu'au bout ma prose.
    Teto.
    a- Hum ... bouaif. J'avais découvert la POO avec TP5.5 et je l'avais apprise avec Eiffel. Java est gentil à côté. Mais ce n'est pas le lieu pour cela.

    b- Bien sûr que si. Vous appelez ça des "références" en Java. A quelques propriétés près, c'est pareil.

    c- oui

    d- Tu veux parler du passage par référence ?
    Dans les faits bassement techniques, c'est pareil. Seuls sizeof(T*) octets^Wbytes circulent sur la pile.
    Par contre avec la référence C++, on a une garantie de non-nullité. Pas besoin de if ou de assert derrière.
    Cela veut aussi dire qu'avec un pointeur, on peut simuler des paramètres optionnels en passant parfois des trucs nuls -- comme en Java, pointeur et référence-java, même combat.

    Sémantiquement, avec un pointeur, on peut décider de s'emparer de la responsabilité du paramètre. Avec une référence, on signale très clairement que ce serait une idée stupide.

    e- quoi ? Quel rapport avec les trucs statiques ?

    f- Il existe des pointeurs de fonctions et aussi des pointeurs de fonctions membres si c'est ça ta question.
    A quoi ça sert ? C'est une autre façon, plus ancienne de réaliser le pattern commande.
    C'est ce qui sert aussi de base à la définition de boost::function/std::tr1::function et futurement std::function.

    g- l'expérience a montré que les pointeurs ne sont pas trop nos amis. Cherche RAII dans la FAQ.
    De plus il y a plusieurs écoles de C++. En gros l'école historique qui vient du C, et l'école moderne qui essaie de s'en affranchir. Et plein de cas hybrides entre.

    h- la FAQ ?
    Sinon, AC++ si tu veux apprendre le C++.
    Et plein de choses intéressantes sur GOTW concernant les ressources en ligne.

    j- Une école, à laquelle je tends à adhérer, tend à dire de ne pas utiliser de pointeurs bruts dans le code métier. On va les réserver à des classes "bas-niveau" à tendance informaticiennes. Dans le code métier on préférera les conteneurs standards ou les pointeurs intelligents comme ceux à comptage de référence que sont boost::shared_ptr<>/std::tr1::shared_ptr<>, futurement std::shared_ptr<> (aussi std::unique_ptr<>, bientôt).
    La règle que je me suis gravée dans le marbre, c'est : ne jamais être responsable de plus d'une ressource brute (cela englobe aussi la mémoire) à la fois.
    Et par extension, j'expérimente le "jamais de new[]".


    PS: pour le code, on utilise la balise code et pas la balise quote. D'autant que la politique de citation de developpez est encore moins pratique que ce que l'on voit sur les autres forums phpBB. -> Cite mon message et tu verras que les citations de ton message que j'ai gardées auront disparues. D'où entre autres raisons l'indexation que j'utilise.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre Expert
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Par défaut
    En Java il n'y a pas de type pointeur parce que le langage décide pour toi :
    • soit c'est un type primitif et alors tu ne peux pas pointeur dessus, si tu veux quand même tu es obligé d'utiliser un tableau et de considérer l'index dans le tableau comme un pointeur
    • soit c'est un objet et alors c'est forcément une réference (un pointeur sécurisé)


    En C/C++ il n'y a pas une telle castration du système de type :
    • tu peux pointer sur des types primitifs
    • tu peux créer des tableaux d'enregistements (consécutifs en mémoire). il n'y aura pas de pointeur sur chacun de ces enregistements, tu pourras les parcourir en incrémentant un pointeur


    Le type pointeur est un opérateur/constructeur de type qui te rend la gestion de la mémoire que Java t'enlève au nom de la sécurité et du ramassage automatique.

    Comme le dit Luc Hermitte, un style recommandé consiste à coder en C++ un peu comme tu le ferais en Java, et à cacher les manipulations de pointeurs (pour le bas niveau et/ou la performance) dans des boites à outils réutilisables.

  4. #4
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut Bon, j'ai compris... ;-)
    Alors reprenons dans l'ordre:

    @Luc:
    - Désolé pour les quote, je savais pas. 'Ferai plus, promis.
    - a) Sans doute. Mais faut bien commencer par quelque chose, et vu la communauté pour Java, cela permet d'avancer vite quand on a besoin d'aide.
    - d) assert, keskecé? (inutile de me répondre, cf plus bas)
    - e) quand on déclare une variable ou une méthode static, elle n'est initialisée qu'une fois, comme en C++. Mais en Java, en plus, on peut l'appeler directement sans être obligé d'instancier la classe. Les constantes, par exemple sont déclarées public static final, et ainsi on peut demander -> float f = classe.PI; sans être obligé de faire classe c = new classe(); float f = c.PI;. Quel est le lien avec les pointeurs? heu il me semblait qu'ils permettaient d'accéder directement aux données aussi, mais heu beuarf..
    - f) pattern commande? (inutile de... etc)
    - g) ça, j'ai vu ce soir, en regardant d'autres questions sur le forum (incroyable le nombre qui concerne les pointeurs...)
    - h) Yes! mais ce que j'y avais lu ne m'avait pas trop emballé, mais c'est sans doute parce que je débute, je pense qu'avec un peu d'expérience ça ira mieux. GOTW ? Je viens de noter précieusement l'adresse. Merci!
    - j) Au vu des expériences rapportées sur différents forums, cela semble être une excellente règle de vie. J'adhère!

    @SpiceGuid
    En lisant des bouquins sur le Java, c'est ce que j'avais lu. Basically le java est un C++ simplifié, qui supprime tout ce qui donne des maux de tête dans la pratique du C++.

    @Tous
    Merci pour vos réponses circonstanciées zé adéquates.Ce que je vais faire, c'est approfondir et continuer mon apprentissage, je reviendrai éventuellement à la charge quand mon tour d'horizon sera fini et digéré...
    Le post est [résolu].

    Teto.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 293
    Par défaut
    e- Les pointeurs permettent de pointer vers n'importe quoi (ou presque). Statique de classe ou pas, peu importe. C'est orthogonal.

    d- Pour assert, cherche nos posts sur la programmation par contrat.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Une variable membre statique peut être utilisée sans instance de la classe aussi en C++, tu sais...
    C'est juste que la syntaxe est sensiblement différente:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    float f = classe::PI;

    De plus, attention avec le new en C++: Il est facile d'avoir une fuite de mémoire quand on l'emploie ainsi "à la java".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Une variable membre statique peut être utilisée sans instance de la classe aussi en C++, tu sais...
    C'est juste que la syntaxe est sensiblement différente:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    float f = classe::PI;

    De plus, attention avec le new en C++: Il est facile d'avoir une fuite de mémoire quand on l'emploie ainsi "à la java".
    Je ne réponds que maintenant, car je voulais en apprendre plus sur le C++, maintenant c'est fait.
    - Oui, effectivement, le static exist aussi en C++.
    - Je plussoie sur les fuites de mémoire quand on l'emploie à la java. C'était l'avantage du garbage collector en java... pas besoin de se prendre la tête.

    Merci pour les infos.
    Teto.

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    - Je plussoie sur les fuites de mémoire quand on l'emploie à la java. C'était l'avantage du garbage collector en java... pas besoin de se prendre la tête.
    SUJET A TROLL

    Je n'arrive pas à remettre la main sur le topic (je ne sais même plus si c'était sur dvp ou sur fclc++) qui expliquait qu'un GC en C++ c'est assez moyen quand tu compares avec les outils comme le RAII (qui assure zéro fuites et une efficacité maximale).

    PS/ Le voici, même si en fait il n'est pas full C++
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Teto45 Voir le message
    - Je plussoie sur les fuites de mémoire quand on l'emploie à la java. C'était l'avantage du garbage collector en java... pas besoin de se prendre la tête.
    Si c'est pour faire c = a+b ou return c; je suis d'accord...
    Mais les fuites mémoire existent aussi en Java, et... bizarrement, elles sont
    même bien plus difficile à détecter/corriger !
    La gestion de la mémoire en java est assez complexe, avec des 'zones' mémoires à comportement différent (et plus ou moins extensibles).

    Un truc tout bête que la plupart des (mauvais?) développeurs java oublient: *rien n'oblige la machine virtuelle à libérer la dite mémoire*.
    La "célebre" fonction "finalize" peut très bien n'être jamais appelée (exit le RAII)... On en revient donc, pour les objets ayant une acquisition de resource, à créer un "destructeur" manuel, (close, dispose, release, ...)
    Du coup on en revient à écrire du code style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Connection conn = null;
    Statement stmt = null;
    ResultSet res = null;
    try {
        conn = acquireConnection();
        stmt = conn.prepareStatement();
        res = stmt.execute();
        ....
    } finally {
        if (res != null) { try { res.close(); } catch (Exception ex) { log.fatal(); } }
        if (stmt != null) { try { stmt.close(); } catch (Exception ex) { log.fatal(); } }
        if (conn != null) { try { conn .close(); } catch (Exception ex) { log.fatal(); } }
    }
    A noter pour finir, que dès qu'on commence à toucher aux Reference de java (Week, Soft ou Phantom), on peut très bien créer du vrai resource leaking, car la fonction finalize ne peut être appelée qu'une fois et une seule sur un object, alors que ces references permettent de "récupérer" une vraie reference sur l'objet en question *apres* le finalize !

    Enfin bref, la gestion mémoire en java est loin d'être aisée, et, à mon humble avis, beaucoup plus complexe qu'en C/C++ !!

  10. #10
    screetch
    Invité(e)
    Par défaut
    sujet a troll désormais...

    pour en revenir aux pointeurs, ils permettent de controler "l'ownership" (le proprietaire) d'un objet.
    Chaque pointeur est un moyen d'acceder a un objet. Un "alias"
    Une référence est également un alias, c'est un pointeur particulier.

    Lorsque je code :
    1) un pointeur est un accès a un objet
    2) un pointeur est en général encapsulé dans un "pointeur intelligent"
    3) l'ensemble des "pointeurs intelligents" va controler la durée de vie de l'objet

    Une référence est très similaire avec la contrainte "a toute référence correspond 1 objet". En gros, une référence est un pointeur qui pointe forcément vers un et un seul objet. Un pointeur peut pointer "dans la moquette" (sur rien) ou bien sur un objet, et on peut changer d'avis pour ce pointeur, le faire pointer ailleurs (ce que j'évite de faire car c'est perturbant)

    voila, pour résumer, les pointeurs servent généralement au partage de ressource entre plusieurs proprietaires. Le pointeur "nu" devrait etre utilisé le moins souvent possible (jamais, en fait), remplacé par des "shared_ptr", "weak_ptr", "scoped_ptr" (ou "auto_ptr"), "unique_ptr"

    la référence, je n'arrive jamais a m'en servir a cause de la contrainte d'association forte avec un objet

    c'est gentil de parler de ca, ca me rappelle que je n'ai jamais implémenté les weak_ptr dans mon projet et que des tonnes de pointeurs nus se baladent "en attendant d'avoir les weak_ptr"

  11. #11
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut
    Citation Envoyé par screetch Voir le message
    sujet a troll désormais...
    Oui, évitons de le nourrir... D'autant que je suis en train de lire un post spécifique à ce sujet, donc...

    Merci Screetch de tes précieuses précisions. Au fur et à mesure des mes lectures de tutos je commençais à appréhender le concept, mais c'est toujours très sympa d'avoir une explication claire et précise. Merci encore

    Maintenant, j'ai cru comprendre que les pointeurs intelligents sont dans des bibliothèques 'non standards', sauf si je me goure. Ceux dont tu me parles font partie de Boost? Cette bibliothèque a des bons trucs pour tout ce qui est gestion de mémoire / pointeurs?

  12. #12
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 293
    Par défaut
    boost est une collection hétéroclite de choses souvent forts utiles.
    Un certains nombre de ces choses ont servi de base de discussion pour intégration dans le futur standard du C++.

    Donc, si tu as un compilateur récent (GCC4.x ou VC 2008) dans std::tr1:: tu trouveras les shared_ptr, weak_ptr et unique_ptr du prochain standard. Si tu disposes d'un compilo plus ancien, ces choses sont disponibles dans boost.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ayant grandi avec COM, j'ai tendance à préférer les intrusive_ptr. Mais c'est vrai qu'avec ceux-là, on manque la souplesse supplémentaire du couple shared_ptr+weak_ptr...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    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 : 50
    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
    Je me permet de faire de la pub pour mon tuto sur le sujet :
    http://loic-joly.developpez.com/tuto...mart-pointers/
    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.

  15. #15
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je me permet de faire de la pub pour mon tuto sur le sujet :
    http://loic-joly.developpez.com/tuto...mart-pointers/
    Oui, merci. J'avais déjà lu, mais je l'ai relu, ça m'a fait du bien. Puisque tu t'es fait un peu de pub , une petite question: Quel compilateur est capable de compiler les pointeurs intelligents de la future norme C++0x ? Et quelle bibliothèque possède ces nouveaux pointeurs et pleins d'autres choses très intéressantes, en gros qui m'éviterait à me coltiner 10 biblios différentes (je parle uniquement de biblios généralistes) pour une appli moyenne. Boost, je suppose?

    Teto.

  16. #16
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580

  17. #17
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut
    Citation Envoyé par Goten Voir le message
    Merci Mais je dois être neuneu car je n'ai rien vu concernant les pointeurs intelligents. Mais ça doit être noyé dans autre chose que je ne connais pas...

  18. #18
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 293
    Par défaut
    /library<tab><entree>/shared (sous firefox)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  19. #19
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par Teto45 Voir le message
    Merci Mais je dois être neuneu car je n'ai rien vu concernant les pointeurs intelligents. Mais ça doit être noyé dans autre chose que je ne connais pas...
    En dessous du tableau (core features) t'as :
    C++0x Library Features
    tu cliques sur table et là t'a la liste.
    après comme te l'as dis luc :
    /shared
    /weak
    etc

  20. #20
    Membre actif Avatar de Teto45
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 145
    Par défaut
    Thanks guys!
    En bref ça existe. C'est bon à savoir. À vrai dire, j'ai pas envie de me faire chhh...suer avec les pointeurs, et si je peux m'en passer sans (trop de) perte en rapidité d'exécution, tant mieux.

    Moralité: 'Faut que j'importe la bibliothèque GCC, épicé tout!

    Teto.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2012, 11h31
  2. [Avis] Pourquoi GUI plutôt que JSP ?
    Par habasque dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 24/11/2006, 13h07
  3. Pourquoi faut-il utiliser des tables plutôt que des frames ?
    Par malicia_bm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/10/2006, 09h20
  4. Réponses: 1
    Dernier message: 09/07/2006, 23h39

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