|
Bas de page | |
---|---|
Auteur | Sujet : opérateur = |
Publicité | Posté le 07-03-2009 à 14:10:15 |
jesus_christ votre nouveau dieu | bof, ça dépend des classes.
|
Un Programmeur |
Message cité 1 fois Message édité par Un Programmeur le 07-03-2009 à 17:05:36 |
weblook$$ |
Merci pour ta réponse détaillée. Un point m'échappe.. Message édité par weblook$$ le 07-03-2009 à 16:59:51 |
Un Programmeur | Si tu utilises std::swap et que tu ne l'as pas spécialisé, n'utilises pas cet idiome au risque de te retrouver avec une boucle infinie: std::swap est défini en fonction de l'opérateur =.
|
weblook$$ | ce qui me dérange également ,c'est l'utilité de faire un swap, on s'en fiche que other contienne this ? on veut juste que this contienne other, alors pourquoi swaper?? c'est simplement le nom qui induit en erreur en réalité on ne swappe pas ? |
Un Programmeur | Il est passé par valeur. Son contenu est détruit à la fin de l'opérateur. |
weblook$$ | mais il y a donc des opérations inutiles, il aurait suffit d'affecter plutot que de swapper Message édité par weblook$$ le 07-03-2009 à 18:37:19 |
Un Programmeur | Mesures et quand tu trouves un cas où la différence est significative, tu passes à d'autres techniques. Le gros avantage de cet idiome, c'est qu'il te donne par construction un comportement correct, même quand il peut y avoir des exceptions. D'autres méthodes te donne le même résultat, mais ne sont pas systématiquement applicable. Et parfois tu n'as pas besoin du rollback en cas d'exception. Mais il me semble que c'est une bonne technique à utiliser tant qu'on n'a pas de bonnes raisons pour faire autrement. Message édité par Un Programmeur le 07-03-2009 à 18:46:03 |
weblook$$ | ok thx |
Publicité | Posté le 07-03-2009 à 19:00:36 |
Joel F Real men use unique_ptr | l'operatro= definit par swap est relativement sexy et le sera d'autant plus lorsqu'on aura un vrai semantique de move avec les rvalue references |
weblook$$ | Finalement je me rends compte que je n'arrive pas avoir le cas ou la non spécialisation de l'opérateur = peut poser problème... L'opérateur = n'est appelé que lorsqu'une fonction retourne un Objet de la classe A& func(A& a) f=func(f1); //appelé ici Mais étant donné qu'il s'agit d'une référence qui est retourné, il n'y pas le problème d'un pointeur non valide c'est utile uniquement dans le cas où l'on écrit : A a; ? bref j'aurais besoin d'un petit éclairssissement svp Message édité par weblook$$ le 08-03-2009 à 23:27:18 |
Un Programmeur | Qui va detruire l'objet pointe si tu copies un pointeur? |
weblook$$ | oups oui, en me levant ce matin tout était plus clair... :$, effectivement dans le cas du retour de fonction, on aura bien in fine deux objets ayant chacun un membre pointant vers la même adresse mémoire donc problème lors de la destruction car double delete sur une même adresse, et si de plus on alloue ce membre dans le constructeur, on aura aussi une fuite de mémoire, car l'adresse mémoire initiale du membre donné de type pointeur appartenant à l'objet recevant le retour de fonction ne sera jamais désaoullé, enfin si j'ai bien tout compris !
Message édité par weblook$$ le 09-03-2009 à 12:07:06 |
weblook$$ | Bon j'enchaine lol, j'ai également rencontré un problème en utilisant le fameux std::swap, dans le code suivant :
Message édité par weblook$$ le 09-03-2009 à 11:51:21 |
weblook$$ | ok c'est le const qui foutait le bordel... mais un const_cast<int>(f.nb) ne marche pas , ça me suprend.. obliger de fire un static_cast, à moins de faire
Message édité par weblook$$ le 09-03-2009 à 20:17:56 |
Sujets relatifs | |
---|---|
problème surcharge opérateur | faire des macros avec l'operateur << windows et linux |
operateur d'affectation | [C#.NET] Surcharger l'operateur " ++ " pour une hashtable, comment ? |
[c++] operateur affectation | [Résolu ]Opérateur de comparaison en python |
surcharge de l'opérateur [][] | [C++] Surchage de l'opérateur [] |
[C++] Problème avec l'opérateur % | [Mysql] opérateur 'ou' |
Plus de sujets relatifs à : opérateur = |