Niejawne wywołanie konstruktora kopiującego.
witam,
może zacznę od kodu:
mam następująco rozpisaną klasę
class kalibracja
{
private:
float a, b;
char nazwa[80];
public:
//-- konstruktor
kalibracja(float wsp_a, float wsp_b, const char * txt);
//-- konstruktor kopiujacy
kalibracja(const kalibracja & wzor);
//-- inne funkcje
float energia( int kanal)
{
return ( (a * kanal) + b );
}
char * opis() {return (nazwa) ; }
};
kalibracja::kalibracja(float wsp_a, float wsp_b, const char *txt ) : a(wsp_a), b( wsp_b)
{
strcpy(nazwa, txt);
}
kalibracja::kalibracja(const kalibracja & wzorzec)
{
this -> a = wzorzec.a;
this -> b = wzorzec.b;
strcpy(nazwa, "-- To ja, kontruktor kopiujacy !!! --");
}
oraz funkcję (nie będącą składową żadnej klasy), która ma za zadanie we własnym zakresie stworzyć nowy obiekt, wypisać jego nazwę na ekran oraz zwrócić jego zawartość poprzez nazwę:
kalibracja fun_druga(void)
{
kalibracja wewn(2, 1, "WEWNETRZNA");
cout << "W funkcji fun_druga definiuje kalibracje i ma \nona opis : "
<< wewn.opis() << endl;
return wewn;
}
Następnie w programie mam linijkę
cout "Rezultat funkcji ma opis: "<< (fun_druga() ).opis()<< endl;
//output: W funkcji fun_druga definiuje kalibracje i ma ona opis : WEWNETRZNA
//Rezultat funkcji ma opis: WEWNETRZNA
Cały problem polega na tym, że: w Symfonii C++ jest wyjaśnione, że kiedy fun_druga zwraca obiekt, zwraca go przez wartość to po wyjściu z tej funkcji obiekt wewn zostaje zniszczony, ale rezultat zostaje
przekopiowany przez konstruktor kopiujący, więc output powinien być:
W funkcji fun_druga definiuje kalibracje i ma ona opis : WEWNETRZNA
Rezultat funkcji ma opis: -- To ja, kontruktor kopiujacy !!! --
ale nie jest. Dlaczego?
Czy funkcja zwraca obiekt przez referencje, albo pointer? W definicji funkcji nic takiego nie ma, więc obiekt powinien być zwrócony na takiej zasadzie jak typy wbudowane, przez wartość.