me escribió el siguiente código:C++ devolución de una copia objeto
class MyObjectHolder {
public:
std::vector<int> getMyObject() const {
return myObject;
}
private:
std::vector<int> myObject;
};
En algún momento de mi programa intento utilizar el método getMyObject
y utilizar sólo const
métodos en el objeto recuperado:
const std::vector<int> myObject = myObjectHolder.getMyObject();
myObject.size();
int a = myObject.front();
Ahora, es posible que el compilador optimice este código para que no haya copias del
std::vector<int>
están hechos?¿Es posible de alguna manera que el compilador determina que sólo estoy usando los
const
métodos en el objeto recuperado (y vamos a suponer que no haymutable
absurdo sucediendo detrás de él) y no tendría ninguna copia de los objetos y realice estas operacionesconst
en el miembroprivate
delMyObjectHolder
en su lugar?En caso afirmativo, ¿sería posible si no declara explícitamente el
const std::vector<int> myObject
comoconst
?Si no, ¿cuáles son las razones para no hacer esto? ¿En qué casos esta optimización sería difícil de implementar/deducir que es posible y correcta aquí/etc ...?
[RVO] (http://en.wikipedia.org/wiki/Return_value_optimization) implica objetos temporales. A menos que me falta algo, no hay objetos temporales aquí, así que no hay ningún RVO. – hmjd
@hmjd Derecha. No debería estar hablando del 'RVO' aquí, solo acerca de la posible optimización con el uso de la variable' private' directamente. Gracias. –