Prosty operator przypisania

0

Mam taki operator przypisania:

pojazd & pojazd::operator=(const pojazd & wz)
{
ilosc_kol = wz.ilosc_kol;
return *this;
} 

Zwracanym rezultatem jest referencja do obiektu aby był możliwy zapis kaskadowy.

Chciałem spytać czy prawidłowym operatorem przypisania byłby przykład jakby zwracanym rezultatem był tylko obiekt, a nie referencja do niego:

pojazd  pojazd::operator=(const pojazd & wz)
{
ilosc_kol = wz.ilosc_kol;
return *this;
} 

Chyba byłoby dobrze ? Tylko by tworzyła się kopia obiektu, więc praca programu dłużej by trwała ?

0

Akurat wydajnością bym się nie przejmował. Aczkolwiek jeśli nie ma żadnego zysku, to po co niepotrzebnie kopiować.Główną różnicą jest to o czym sam wspomniałeś, czyli druga wersja nie umożliwia wielokrotnego przypisania

zmienna1 = zmienna2 = zmienna3;

Swoją drogą jeśli zadaniem operatora przypisania jest kopiowanie jakiejś zmiennej, to domyślnie wygenerowany będzie w zupełności wystarczający.

0

Dlaczego by tego nie umożliwiało ? Przecież jest zwracany obiekt.

czyli by umożliwiało tylko dłużej by to trwało ?

0

Nie, żaden z tych operatorów nie jest dobry.

Oba są bez sensu, bo wystarczy Ci operator przypisania wygenerowany przez kompilator. Nie pisz swojego jeżeli to nie jest do niczego potrzebne! Operator przypisania jest potrzebny tylko wtedy, kiedy obiekt przechowuje jakieś zasoby, które nie mogą być tak po prostu skopiowane (np. wskaźniki do zaalokowanej pamięci). A i wtedy można go uniknąć stosując odpowiednie "opakowania" - kontenery z biblioteki standardowej czy smart pointery.

1

Jeśli sie już uparłeś na ten operator, to poczytaj o copy and swap idiom.

0

Jak spróbujesz przypisać ten sam obiekt do siebie to ten operator zrobi brzydkie rzeczy...

0

Aby nie działy się dziwne rzeczy, jeśli spróbujesz przypisać ten sam obiekt do siebie, wklej na początek taki warunek:

if (this == &wz) return *this;
0

@Zielony_Buszmen: bullshiet, tak sie nie robi, czytaj moj post up.

1 użytkowników online, w tym zalogowanych: 0, gości: 1