To što tebi treba je RVO (return value optimization), koju podržava MSVC a verovatno još
kompajlera, čini mi se i GCC. Problem je što ta optimizacija neće uvek raditi, evo primera:
Code:
Vector getVec( float X, float Y, float Z )
{
Vector ret(X,Y,Z);
return ret;
}
U ovom slučaju, kompajler neće uraditi ništa, dok će u sledećem potpuno eleminisati copy-constructor:
Code:
Vector getVec( float X, float Y, float Z )
{
return Vector(X,Y,Z);
}
nrvo_test RVO(int value) {
return nrvo_test(value); //ovako se pomaze kompajleru da uradi rvo optimizaciju
} //dakle povratna vrednost se generise uz pomoc konstruktora
//u povratnom delu funkcije
Videces kad iskompajliras ovaj program koliko puta je pozvan konstruktor i destruktor i po tome mozes da zakljucis da li je optimizacija izvrsena ili ne.
[Ovu poruku je menjao kiklop74 dana 10.08.2006. u 14:02 GMT+1]
Code: nrvo_test RVO(int value) {
return nrvo_test(value); //ovako se pomaze kompajleru da uradi rvo optimizaciju
}
Znaci ovo bi trebalo uvijek raditi.
Nema definitivnog odgovora na to pitanje. U vecini slucajeva verovatno da. Kao i sve drugo u programiranju sve zavisi od okolnosti kao i od tipa kompajlera, opcija za optimizaciju itd.