De plus, je ne suis pas un spécialiste de C++.
Cependant :
- je suis persuadé
(EDIT: en d'autres termes, ça relève ici de l'intuition) qu'il est possible de mettre en place un contrôle d'accès relativement fin dans un getter/setter ;
- déclarer un friend, c'est, en gros, sortir le contrôle de la classe à qui il correspond. Si tu déclares une méthode ou une classe comme friend, que le développement de ladite méthode ou classe est confié à une autre équipe qui trouve que ça serait bien pratique si ta variable privée était quand même publique, elle a le pouvoir de la rendre publique "de fait" en implémentant un getter et un setter d'interface. Et toi qui trouvais que les getter et les setter n'étaient pas assez sécurisés, tu te retrouves avec un getter et un setter dont tu ne maîtrises même pas le code (dont tu ne connais même pas l'existence, d'ailleurs) alors que tu aurais sans doute pu faire mieux. En résumé, c'est une considération assez théorique, mais si l'enceinte "à sécuriser" est ta classe de départ (le reste de l'application en étant a priori exclu), alors un "friend" constitue en théorie une faille dans les processus de contrôle d'accès via les mots-clés, puisqu'il permet à une classe (et donc théoriquement à toutes les autres) de les contourner.
Partager