Eventuali duplicati:
how to “return an object” in C++C vettore ++, di ritorno contro parametro
Mi chiedo se c'è una differenza tra le seguenti tre approcci:
void FillVector_1(vector<int>& v) {
v.push_back(1); // lots of push_backs!
}
vector<int> FillVector_2() {
vector<int> v;
v.push_back(1); // lots of push_backs!
return v;
}
vector<int> FillVector_3() {
int tab[SZ] = { 1, 2, 3, /*...*/ };
return vector<int>(tab, tab + SZ);
}
in prestazioni? – Anycorn
Restituisci semplicemente per valore e ti preoccupi delle prestazioni quando ritieni che sia effettivamente un problema. Quindi traccia il profilo in modo da non dover indovinare. Sto chiudendo preventivamente come [duplicato] (http://stackoverflow.com/questions/3350385/how-to-return-an-object-in-c). – GManNickG
Non avrei votato per chiuderlo come duplicato per un paio di motivi: (1) La domanda precedente aveva specifiche sull'allocazione dinamica della memoria che non si applicano a questa domanda, e (2) questa domanda è specifica per STL che può invoca altri idiomi come inserire gli iteratori. Inoltre, alcune implementazioni di STL già sfruttano i riferimenti a valore r di C++ 0x per ridurre al minimo la copia. Questo metodo non si applica alla domanda precedente. –