учтите следующее:
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;
}
выполнение этого кода дает следующий результат:
X(int i)
X(int i)
X(int i)
Я думал, что все три вышеупомянутых оператора эквивалентны, поскольку копирующий CTOR никогда не вызывается. Однако изменение CTOR копии X
на частный:
class X {
public:
X(int i) { cout << "X(int i)" << endl; }
private:
X(const X& x) { cout << "X(const X& x)" << endl; }
};
Не удалось скомпилировать (в Visual Studio 2010) с этой ошибкой:
cannot access private member declared in class 'X'
Таким образом, похоже, что CTOR копии каким-то образом задействован, хотя я Не совсем понимаю, как.
Спасибо