Почему при использовании std:: shared_ptr deallocation звонит деструкторам из базового и производного классов, когда второй пример вызывает только деструктор из базового класса?
class Base
{
public:
~Base()
{
std::cout << "Base destructor" << std::endl;
}
};
class Derived : public Base
{
public:
~Derived()
{
std::cout << "Derived destructor" << std::endl;
}
};
void virtual_destructor()
{
{
std::cout << "--------------------" << std::endl;
std::shared_ptr<Base> sharedA(new Derived);
}
std::cout << "--------------------" << std::endl;
Base * a = new Derived;
delete a;
}
Вывод:
--------------------
Derived destructor
Base destructor
--------------------
Base destructor
Я ожидал такого же поведения в обоих случаях.