En este fragmento de código, ¿qué constructor se llama realmente?¿Qué constructor se invoca aquí?
Vector v = getVector();
vector tiene constructor de copia, constructor predeterminado y operador de asignación:
class Vector {
public:
...
Vector();
Vector(const Vector& other);
Vector& operator=(const Vector& other);
};
getVector rendimientos por valor.
Vector getVector();
El código utiliza el estándar C++ 03.
Fragmento de código parece que se debe llamar al constructor predeterminado y luego al operador de asignación, pero sospecho que esta declaración es otra forma de usar el constructor de copia. ¿Cual es correcta?
Una regla que no vale nada es que el constructor de copias debe ser accesible (por ejemplo, público) incluso si la construcción de copias termina siendo eliminada. Por lo tanto, puede hacer que el constructor de copias sea privado; el código no se compilará y, al hacerlo público, se compilará, pero no se llamará al constructor de copias. – 6502
"el mismo objeto físico que se almacena en v", más bien, el objeto creado dentro de la función es el mismo objeto físico que 'v'. Normalmente diría que 'v' es el nombre de un objeto, o' v' es ese objeto, pero no "un objeto está almacenado en' v' ". La implementación habitual de esta elisión de copia es que la persona que llama de 'getVector' pasa un puntero como un parámetro oculto adicional, y' getVector' construye su valor de retorno en esa dirección. En este caso, el estándar permite que el código de llamada pase '& v' como ese parámetro oculto. –