/* outputs: * * derived destructor called * base destructor called */ #include /* will generate a class's default ctor, copy ctor, copy assignment operator, * by default data member and dtor are private, default ctor, copy ctor and * assignment operator are public */ class Base { public: virtual ~Base(); }; Base::~Base() { std::cout << "base destructor called\n"; } class Derived : public Base { public: ~Derived(); }; Derived::~Derived() { std::cout << "derived destructor called\n"; } int main(int argc, char **argv) { /* when d goes out of scope, it will call its destructor will call base * class destructor */ Derived d; Base b = d; /* conversion of d into Base takes place on rhs, d is sliced down */ return 0; }