J'utilise C ++ depuis un certain temps et je ne me sens toujours pas très à l'aise d'utiliser des pointeurs intelligents et que je ne les utilise que lors de la modification du code qui les utilise, jamais dans mon propre code (cela pourrait vaut la peine de dire que je suis un étudiant). P>
Pouvez-vous expliquer quels sont les types de pointeurs intelligents, comment fonctionnent-ils et quand les utiliser? P>
En outre, quel est le "protocole" lors de la réception ou de la réception d'un pointeur brut dans des interfaces écrites par d'autres personnes? p>
merci. p>
5 Réponses :
C ++ 98 ne fournit pas de pointeurs intelligents sauf Pouvez-vous expliquer quels sont les types de pointeurs intelligents, comment fonctionnent-ils et quand les utiliser? P>
blockQuote>
Il y en a plusieurs. En bref: p>
(issue de la documentation de boost et notez qu'ils ont des conteneurs pour ces pointeurs aussi!) P>
En outre, quel est le "protocole" lors de la réception ou de la réception d'un pointeur brut dans des interfaces écrites par d'autres personnes? P>
blockQuote>
Pour moi, les règles les plus importantes sont: p>
auto_ptr code> qui est semé de ses propres problèmes. C ++ 0x essaie de résoudre ce problème en apportant quelques variétés de plus (
partagée_ptr code>,
unique_ptr code> etc.). Entre-temps, le meilleur pari est d'utiliser Boost. Jetez un coup d'œil aux différentes saveurs disponibles pour vous ici . Boost est axé sur la communauté, minutieusement testé et bien sûr gratuitement. Il y a une excellente documentation avec un exemple de code qui vous aidera à démarrer. P>
scoped_ptr code> strong>
Scoped_array code> strong>
partagée_ptr code> strud>
partagé_array code> strong>
faible_ptr code> strong>
intrusion_ptr code> strong>
Bonne somme. Je suis en désaccord que Auto_PTR est lourde des problèmes. Si Yuo ne comprend pas ce qu'il fait, il peut vous emmener par surprise, mais cela est résolu en lisant la documentation. De plus, le nouveau C ++ 0x fournit std :: unique_ptr qui est pratiquement une chute de remplacement pour Auto_PTR, mais fait de la sémantique de déplacement plus évidente pour les nouveaux arrivants. Il serait également agréable de voir lesquels ont été inclus dans la nouvelle norme Lib.
Accordé. J'ai été un peu dur et nous continuerons à vivre avec auto_ptr code> (bien que ma copie du projet I.E. N3090 indique qu'il est obsolète).
Appeler une documentation de boost "Excellent" est un peu d'étirement :). La qualité monte et descend en fonction de la liberme en question. Mais bonne réponse en général, +1.
@Lucas: comparé à ce que vous obtenez autrement, oui, je considère que la documentation est excellente. Ymmv.
À propos de la STL Auto_PTR, je recommande de lire Herb Sutter's (Auteur de Good C ++ Livres) Guruofthewek: Utilisez ceci Lien p>
Les types de pointeur intelligents sont une couche d'abstraction permettant d'automatiser le processus d'attribution et de répartition de la mémoire, leur fonction de constructeur, obtient une mémoire allouée (via le pointeur) et leur fonction destructeurs, libère la mémoire allouée. Bien sûr, le constructeur et le destructeur peuvent être inlinés (il n'y a donc pas de surcharge pour les appeler). Par exemple: en C ++, il est agréable d'utiliser indirectement les pointeurs (cachez-les derrière les classes). Les frais généraux de la création d'un nouveau pointeur intelligent sont négligeables. Mais Shared_ptr est plus lourd en raison de son comportement pour compter les références (il s'agit de la référence). P> Lorsque nous voulons utiliser des pointeurs bruts reçus d'autres fonctions qui sont écrites par d'autres personnes, si ces pointeurs crus ne devrait pas être libéré par le nôtre, alors nous ne devrions pas utiliser les pointeurs intelligents. p> p>
Il n'y a pas de règle sur quand utiliser les pointeurs intelligents. Plus de manière appropriée, vous utilisez des pointeurs intelligents dans la mesure du possible. Les pointeurs bruts sont une rareté dans un code C ++ bien écrit. Lorsque vous recevez un pointeur brut, enveloppez-le dans un pointeur intelligent écrit personnalisé personnalisé, s'il est de votre devoir de le compromettre. P>
Pour compléter les réponses et celles disponibles avec la norme C ++ 0x à venir. Ces liens donnent des exemples sur quand et comment ils sont utilisés. Il documente également la relation entre Shared_Ptr et Faible_PR. P>
http: //www2.research.att .com / ~ bs / c ++ 0xfaq.html # std-shared_ptr p>
http: //www2.research.att .com / ~ bs / c ++ 0xfaq.html # std-faibles_ptr p>
http: //www2.research.att .com / ~ bs / c ++ 0xfaq.html # std-unique_ptr p>
Une petite recherche sur ce site très vous donne le suivant Stackoverflow.com/search?q=smart+points
De nombreux doublons différents possibles à cette question ...