2010-10-08 4 views

Odpowiedz

10

To może działać. To zależy od tego, jak zaimplementowano Tile& operator = (const Tile&);. Jednak nie ma nic nieodłącznie błędnego w przypisaniu nowej wartości do *this.

0

To zależy od wdrożenia. Na przykład, jeśli operator przypisania opiera się na pewnej zmiennej członkowskiej klasy Tile, która jest już zainicjowana (i jest to dość typowe) i ta zmienna nie jest inicjowana przez konstruktor Tile przed wywołaniem przypisania *this =, które program może uruchomić w niezdefiniowanym zachowaniu.

+1

Jak to jest właściwe dla pytania? Jeśli konstruktor nie inicjalizuje poprawnie elementu, wykonanie _thingthing_ z obiektem może wywołać niezdefiniowane zachowanie. – sbi

+0

@sbi: Nic. Możesz mieć nieużywaną niezainicjowaną zmienną wskaźnika wskaźnika. W takim przypadku możesz bezpiecznie utworzyć instancję i zniszczyć obiekt. Chodzi mi o to, że * to zależy *. – sharptooth

+0

Przepraszam, ale to nie lata. Taką bestię można również przypisać do i od. – sbi

-1

Bezpieczny, jeśli twój egzemplarz nie działa niczym nieprzyjemny.

+1

Konstruktor kopiowania nie jest wywoływany w podanym kodzie. – YeenFei

1

Kod jest OK, a Herb Sutter even recommends wywołanie operatora przypisania na this, nawet w obrębie konstruktora. Myślę, że to wyjątkowo czyste, eleganckie rozwiązanie. Nawet jeśli to nie działa na początku, zmiana kodu, aby działał, byłaby prawdopodobnie kwestią sprzątania.

+0

To jest jedna rzecz, w której nie zgadzam się z Herbem. Budowa, a nawet kopiowanie konstrukcji i przypisanie to dwie różne operacje z jakiegoś powodu. Jeśli cokolwiek, operator przypisania powinien użyć [idiomu kopiowania i zamiany] (http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom), to znaczy: to _ użyj konstruktora kopii, choć w lepszy sposób niż ten, od którego zaczął się artykuł Herba. – sbi

Powiązane problemy