en cuenta lo siguiente:¿Se requiere la copia CTOR aunque nunca se haya llamado?
class X {
public:
X(int i) { cout << "X(int i)" << endl; }
X(const X& x) { cout << "X(const X& x)" << endl; }
};
void main() {
X x1(1);
X x2 = X(1);
X x3 = (X)1;
}
ejecutar este código produce esta salida:
X(int i)
X(int i)
X(int i)
pensé que todas las tres declaraciones anteriores son equivalentes como el CTOR copia nunca es llamado. Sin embargo, el cambio de X
's copia CTOR ser privada:
class X {
public:
X(int i) { cout << "X(int i)" << endl; }
private:
X(const X& x) { cout << "X(const X& x)" << endl; }
};
fallará para compilar (En Visual Studio 2010) con este error:
cannot access private member declared in class 'X'
por lo que parece el CTOR copia está implicado de alguna manera, aunque No entiendo muy bien cómo.
Gracias
gracias de nuevo ... Tengo uno más por venir :) – dankilman
Sería interesante si añadiera alguna información sobre cuáles son las diferencias reales de la segunda y tercera línea, y bajo qué circunstancias (* Según 8.5/14 en tales casos ... *) a la respuesta –