struct Base {
void f() { printf("Base::f"); }
};
struct Derived : Base {
void f() { printf("Derived::f"); }
};
Base* p = new Derived;
p->f();
Base::f, Base::f . :
struct Base {
~Base() { printf("Base::~Base"); }
};
struct Derived : Base {
~Derived() { printf("Derived::~Derived"); }
};
Base* p = new Derived;
p->~Base();
Base::~Base. , , , , . ( "" ):
struct Base {
virtual ~Base() { printf("Base::~Base"); }
};
struct Derived : Base {
~Derived() override { printf("Derived::~Derived"); }
};
Base* p = new Derived;
p->~Base();
p->~Base() Derived::~Derived(). , , , . ,
Derived::~Derived
Base::~Base
- , .
delete p;
p->~Base();
::operator delete(p);
, , : Derived::~Derived, Base::~Base, . , , Base::~Base.