Witam
Pytanie: dlaczego przy pierwszym przypisaniu do k1 nie jest wołany konstruktor kopiujący?
KlasaTest1 makeKlasaTest1(){
return KlasaTest1(11);//konstruktor z parametrem int
}
KlasaTest1 k1 = makeKlasaTest1();//Konstruktor z parametrem wewnątrz funkcji
KlasaTest1 k2 = k1;//konstruktor kopiujący
k1 = makeKlasaTest1();//operator przypisania
Układam sobie filozofię, że jeżel mamy osierocony obiekt tymczasowy to nie ma sensu go kopiować konstruktorem kopiującym, tylko staje sie on obiektem k1.
Co ciekawe jeśli zmodyfikuję funkcję następująco:
KlasaTest1& makeKlasaTest1(){
KlasaTest1 *k = new KlasaTest1(11);
return (*k);
}
to najpierw w metodidze jest wołany konstruktor z parametrem int, a później przy przypisaniu
KlasaTest1 k1 = makeKlasaTest1();
już jest wołany konstruktor kopiujący, bo zwracana jest referencja, a referencja nie jest z definicji osierocona.
Tylko powyższa filozofia troche mi wygląda na naciąganą. Mało profesjonalną. Będę wdzięczny jak sie ktoś wypowie na ten temat.