2010-10-08 43 views

Répondre

10

Cela pourrait fonctionner. Cela dépend de la façon dont Tile& operator = (const Tile&); est implémentée. Cependant, il n'y a rien d'intrinsèquement erroné à attribuer une nouvelle valeur à *this.

0

Cela dépend de la mise en œuvre. Par exemple, si l'opérateur d'affectation s'appuie sur une variable membre de la classe Tile étant déjà initialisée (ce qui est habituel) et que cette variable n'est pas initialisée par le constructeur Tile avant d'appeler l'affectation *this =, le programme peut avoir un comportement indéfini.

+1

En quoi est-ce spécifique à la question? Si un constructeur n'initialise pas correctement un membre, faire _anything_ avec l'objet peut invoquer un comportement indéfini. – sbi

+0

@sbi: Pas n'importe quoi. Vous pouvez avoir une variable de membre de pointeur non initialisée inutilisée. Dans ce cas, vous pouvez instancier et détruire l'objet en toute sécurité. Mon point est que * ça dépend *. – sharptooth

+0

Désolé, mais ça ne vole pas. Une telle bête pourrait également être assignée à et de. – sbi

-1

Sûre si votre consturctor de copie ne fait rien de méchant.

+1

Le constructeur de copie n'est pas appelé dans un code donné. – YeenFei

1

Le code est OK et Herb Sutter even recommends appelant l'opérateur d'affectation sur this, même dans un constructeur. Je pense que c'est une solution extrêmement propre et élégante. Même si cela ne fonctionne pas au début, changer votre code pour le faire fonctionner serait probablement une question de nettoyage.

+0

Alors c'est une chose où je suis en désaccord avec Herb. La construction, même la construction de copie, et l'assignation sont deux opérations différentes pour une raison. Si quelque chose, l'opérateur d'affectation doit utiliser le [idiome copy-and-swap] (http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom), c'est-à-dire: il _does_ utilisez le constructeur de copie, quoique d'une meilleure manière que celle avec laquelle l'article de Herb a commencé. – sbi