|
|
От: |
rg45
|
|
| Дата: | 13.08.25 12:50 | ||
| Оценка: | |||
В конструкторах и деструкторах в C++ виртуальная диспетчеризация методов не работает
#include <iostream>
#include <memory>
class Base
{
public:
virtual void Stop() { std::cout << "Base::Stop" << std::endl; }
virtual ~Base() {
Stop(); // Вот здесь будет вызван Base::Stop, а не Derived::Stop, как некоторые ожидают.
}
};
class Derived : public Base
{
public:
virtual void Stop() { std::cout << "Derived::Stop" << std::endl; }
};
int main() {
std::shared_ptr<Derived> derived_ptr = std::make_shared<Derived>();
// При выходе: "Base::stop"
}