Bonjour,
je suis tombé par pseudo-hasard sur cette page:
http://en.cppreference.com/w/cpp/exp...l/observer_ptr
Il s'agit d'un pointeur intelligent qui ne possède pas l'objet pointé.
Autrement dit, c'est un pointeur intelligent qui ne fait rien, ni lors de l'assignation (pas de compteur), ni en fin de vie (il ne touche pas à l'objet pointé).
Autrement dit, ce n'est finalement rien d'autre qu'un pointeur nu renommé.
Autrement dit, on pourrait proposer une implémentation de observer_ptr comme suit:
Du coup, ça me ramène à une de mes vieilles interrogations: l'utilisation de pointeurs nus est-elle si diabolique qu'on le dit?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template<typename T> using observer_ptr = T*;
Moi personnellement, j'utilise des pointeurs nus dans mes programmes, mais en respectant la règle d'or suivante: jamais, Ô grand jamais, de delete (donc pas de "new nu", j'y reviendrai). Autrement dit, je m'octroie le droit d'utiliser des pointeurs nus, à condition que ceux-ci ne soient jamais propriétaires des objets pointés. Avec pour conséquence assumée (et parfois souhaitée) que ce pointeur puisse être null. Et jusqu'ici, sauf dans d'improbables cas de terrorisme orienté objet (par exemple utiliser un pointeur déclaré statique et initialisé sur une référence), mes programmes sont très stables.
Au final, je me demande donc si la polémique du pointeur nu ne serait pas un faux problème. A l'instar du RAII qui est mal nommé, le problème du pointeur n'est pas sa création, mais sa destruction. Mais sa création (construction) détermine sa destruction. Si on créée un pointeur avec un "new nu", c'est à dire un new en dehors de toute forme d'encapsulation (notamment dans un smart pointer), alors il faudra faire un delete. Si en revanche on utilise un new encapsulé dans une structure raii-esque (de type smart pointer notamment), alors on a pas besoin de delete et alors tout va bien, puisque le cycle de vie sera géré de façon simple et intelligente par la structure en question.
Et donc, et pour finir, j'en arrive à me demander quelle peut bien être l'utilité de cet étrange animal, l'observer_ptr.
Partager