Se utilizzo auto_ptr come valore di ritorno di una funzione che popola vettori di grandi dimensioni, questo rende la funzione una funzione di origine (creerà un auto_ptr interno e passerà sopra la proprietà quando restituisce un non const auto_ptr). Tuttavia, non posso usare questa funzione con gli algoritmi STL perché, per accedere ai dati, devo derefferenziare l'auto_ptr. Un buon esempio suppongo che sarebbe un campo di vettori di dimensione N, con ogni vettore con 100 componenti. Se la funzione restituisce ogni vettore di 100 componenti per valore o per ref non è la stessa, se N è grande.valore di ritorno ottimizzazione vs auto_ptr per vettori di grandi dimensioni
Inoltre, quando provo questo codice molto semplice:
class t
{
public:
t() { std::cout << "ctor" << std::endl; }
~t() { std::cout << "dtor" << std::endl; }
};
t valueFun()
{
return t();
}
std::auto_ptr<t> autoFun()
{
return std::auto_ptr(new t());
}
sia autoFun e chiamate divertenti risultato con l'uscita
CTOR dtor
quindi non posso effettivamente vedere la variabile automatico che è stato creato per essere passato alla dichiarazione di ritorno. Significa che l'ottimizzazione del valore di ritorno è impostata per la chiamata valueFun? ValueFun crea due oggetti automatici in questo caso?
Come è possibile ottimizzare una popolazione di una struttura di dati così grande con una funzione?
Stai chiedendo se RVO funzionerà anche per i tuoi vettori di grandi dimensioni? Se è così, non puoi semplicemente testarlo con un esempio come quello sopra? – juanchopanza
Quando lo collaudo, significa che funziona per tutti i compilatori/piattaforme? Come faccio a sapere che l'RVO è incluso, dovrei leggere le specifiche del compilatore? Cosa succede se il codice è compilato su un cluster HPC con un compilatore diverso e la libreria è grande? – tmaric
Sì, capisco il tuo punto. È una di quelle cose che il compilatore è permesso, ma non è obbligato a fare, quindi non si può mai essere sicuri. BTW hai il supporto per C++ 11? – juanchopanza