67Fermer69
Kevin KoflerLe 25/05/2016 à 02:35
Zeph (./64) :
Folco (./63) :
Dois-je comprendre que le MonObjet a = b; dont je parle dans le premier quote ne crée alors qu'une référence a, référençant le même objet que b, et ne créant pas de nouvelle instance de l'objet ?
Exactement, et normalement c'est ce dont tu devrais avoir besoin 99% du temps. Copier un objet est coûteux**, et à partir du moment où tu paies le prix d'un garbage collector autant l'utiliser à fond et en profiter pour limiter les recopies d'objets.
Le problème, c'est que c'est un piège très vicieux dans ces langages (et c'est vrai quel que soit le langage de ce type: Java, Python, C#, VB.NET, VB classique etc.). Ça arrive très couramment qu'on modifie accidentellement un objet original quand on veut en fait modifier une copie. Ça m'est déjà arrivé (en Java) alors que je connais le problème depuis longtemps (depuis l'époque où j'ai fait du VB). Et j'ai à plusieurs reprises vu et corrigé cette erreur dans le code d'autrui. Et même le mot-clé const (ou final en Java), quand il existe, n'aide pas, parce qu'il protège seulement la référence et non pas l'objet lui-même. À mon avis, les pointeurs explicits (avec copie de l'objet interdite, cf. QObject) et/ou le partage implicit / copie à l'écriture (comme pour les classes de données de Qt) sont beaucoup plus intuitifs.