Насколько я знаю, что конструктор вызывается при создании объекта. Я также знаю, что невозможно создать объект абстрактного класса.
Но когда я запускаю этот кусок кода, я вижу следующее: -
#include <iostream>
using namespace std;
class Pet {
public:
Pet(){cout<<"in base constructor\n";}
virtual ~Pet() = 0; //making pet abstract by making drstructor pure virtual
};
Pet::~Pet() {
cout << "~Pet()" << endl;
}
class Dog : public Pet {
public:
Dog(){cout<<"in drvd constructor\n";}
~Dog() {
cout << "~Dog()" << endl;
}
};
int main() {
Pet* p = new Dog; // Upcast
delete p; // Virtual destructor call
return 0;
}
При компиляции и запуске вывод: -
in base constructor
in drvd constructor
~Dog()
~Pet()
почему вызывается конструктор для Pet, хотя это абстрактный класс и создание объектов для него не разрешено? Так что все сводится к тому, что, наконец, конструктор вызывается только в случае создания объекта?