Au choix:
Et, surtout, j'aurais envie de te retourner la question : pourquoi estimerais tu, même à l'heure actuelle où l'on dispose des pointeurs intelligents, que cette logique n'était pas la bonne, et par quoi la remplacerais tu
- Parce que c'est une alternative plus que correcte à la nécessité de disposer d'un "gestionnaire global centralisé" pour les différents objet
- Parce qu'elle ne fait qu'appliquer ce que l'on répète sans cesse aux débutants : chaque classe doit être responsable de ressources qu'elle manipule
- Parce que cela fonctionne très bien comme cela
- Un peu les trois à la fois
Tout dépend de la manière dont tu envisages les pointeurs intelligents :L'interface de Qt est née avant C++11, donc avant la sémantique de mouvement "done right". C'est donc non pas par choix, mais par circonstance (pour ne pas dire nécessité) que Qt n'a pas d'unique_ptr<> ou équivalent potable dans son interface.
Personnellement, je ne les envisage que pour ce qu'ils sont : des classes qui permettent
- de prendre de manière cohérente la libération des ressources en charge au moment de la destruction, et de respecter le RAII.
- Des classes qui permettent à peu de frais d'augmenter la résistance aux exceptions
La sémantique de mouvement est apparue, selon moi, pour d'autres raisons, comme le fait de vouloir être en mesure de favoriser (N)RVO chaque fois que faire se peut et, effectivement, de permettre de considérer comme légitime le fait qu'un développeur puisse vouloir faire en sorte "d'abandonner" le contenu d'un objet non copiable au profit d'un autre objet de même type.
Bien sur, la sémantique de mouvement se marie très bien avec les pointeurs intelligents. Bien sur, la présence de ces deux notions que j'aurais tendance à qualifier d'orthogonales permet au développeur de forcer l'utilisation de pointeurs intelligents et de la sémantique de mouvement.
Mais l'optique de C++ a toujours été claire en la matière et se limite à une phrase simple "trust developers even if its bullshits".
Dés lors, les questions que je tente de faire en sorte que vous vous posiez sont:
- Est-ce que cela a du sens de vouloir forcer l'utilisateur à adopter cette approche
- Est-ce qu'il n'est pas plus utile d'adopter cette approche de manière globale (au projet, au module) que d'essayer de le faire dans un cas bien particulier qui se placerait en opposition par rappor à l'ensemble global (projet, module)
Mon approche personnelle est que l'on a "tout à gagner" à envisager unique_ptr comme étant un détail d'implémentation, utilisé de manière généralisée mais silencieuse au niveau du projet ou du module.
Et je me sens d'autant plus à l'aise avec cette position que c'est en gros ce que disait Stephan Lavajef lors des going native.
En effet, mais le fait est que je n'ai toujours pas été convaincus par les arguments exposésEdit: De plus, tu sembles être revenu en arrière, au principe de "fuite d'info sur l'implémentation" que je croyais déjà démenti et loin derrière nous...
Partager