Что заставляет вас думать, что это не вызвано? Попробуйте это [Редактировать: изменение кода для использования частного копирования ctor, так как доступность должна проверяться, даже если использовать копии ctor, исключенной]:
class MyClass
{
public:
~MyClass() {}
MyClass():x(0), y(0){} //default constructor
MyClass(int X, int Y):x(X), y(Y){} //user-defined constructor
private:
MyClass(const MyClass& tempObj):x(tempObj.x), y(tempObj.y){} //copy constructor
int x; int y;
};
int main()
{
MyClass MyObj(MyClass(1, 2)); //User-defined constructor was called.
MyClass MyObj2(MyObj); //Copy constructor was called.
}
Попытка компилировать приводит к ошибкам для обеих строк в main
:
myclass.cpp(17) : error C2248: 'MyClass::MyClass' : cannot access private member
declared in class 'MyClass'
myclass.cpp(11) : see declaration of 'MyClass::MyClass'
myclass.cpp(4) : see declaration of 'MyClass'
myclass.cpp(18) : error C2248: 'MyClass::MyClass' : cannot access private member
declared in class 'MyClass'
myclass.cpp(11) : see declaration of 'MyClass::MyClass'
myclass.cpp(4) : see declaration of 'MyClass'
Концептуально, копия ctor используется в обоих случаях, и компилятор обязан проверить, что она доступна. Однако в первом случае компилятор может отказаться от фактического использования копии ctor, если он сможет использовать его.