Рассмотрим пример кода ниже:
#include <iostream>
using namespace std;
class core
{
public:
core(const core& obj)
{
cout << "core copy ctor called\n";
}
core()
{
cout << "core default ctor called\n";
}
};
class sample : public core
{
public:
sample()
{
cout << "sample default ctor called\n";
}
#if 0
sample(const sample& obj)
{
cout << "sample copy ctor called\n";
}
#endif
};
int main()
{
sample s1;
sample s2 = s1; //Line1
return 0;
}
Тип 1: конструктор копирования не объявлен явно для образца класса
(Тип1 показан в приведенном выше коде. Затем компилятор неявно генерирует конструктор копии образца класса). Когда выполняется оператор Line1
, сначала вызывается конструктор копирования class core
, а затем вызывается конструктор копирования class sample
.
Тип 2: конструктор копирования определен явно для примера класса
Когда выполняется оператор Line1
, сначала вызывается конструктор по умолчанию class core
, а затем вызывается конструктор копирования class sample
.
Вопрос:
Почему такая разница в поведении конструктора копирования, как указано в Type1 и Type2?