konstruktor i kopiowanie wyniku

0

Mam klase z dwoma konstruktorami, jeden domyslny - ustawia wszystkie atrybuty na zero i drugi z parametrami - ktore ustawiaja atrybutom wartosci parametrow.
klasa nazywa sie:
class MojaKlasa, a obiekt powiedzmy obiekt;

obiekt zostal utworzony przez domyslny konstruktor
MojaKlasa obiekt;

wykonuje teraz:
obiekt = MojaKlasa(par1,par2,par3);

i interesuje mnie co sie dzieje po prawej stronie znaku rownosci. Czy tam jest tworzony nowy obiekt i jego zawartosc kopiowana jest do tego po lewej stronie po czym obiekt ten jest Od razu niszczony? Czy moze to dziala na innej zasadzie?

Dzieki za odpowiedz.

0

Najprościej będzie jeżeli sam sprawdzisz co zrobi Twój kompilator...
Zdefiniujesz operator=, kontruktor kopiujący, konstruktory i destruktor, który będą pokazywać na ekranie informacje o swoim wywołaniu (np. cout << "nazwa_metody"; )
Najprostsza odpowiedź to: tak, kompilator utworzy obiekt tymczasowy i skopiuje do obiektu po lewej stronie przypisania.
Bardziej skomplikowana to: zależy. Istnieje coś takiego jak (named) return value optimization (NRV lub RVO) i wydaje mi się (jakkolwiek nie jestem pewien konstruktora, na pewno to działa jeśli funkcja zwraca obiekt przez wartość), że w dużej ilości przypadków kompilator taki jak GCC wykorzysta tą optymalizację (oczywiście przy włączonej optymalizacji). Niestety akurat nie mam pod ręką kompilatora, więc sprawdź sam. Rolę może grać także sam sposób zapisu wyrażenia:

Obiekt obiekt = Obiekt(1,2,3);

// czy tak:

Obiekt obiekt;
//...
obiekt = Obiekt(1,2,3);
0

Dzieki wielkie, o to mi wlasnie chodzilo :)

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