From 88118d727819b4d42c0e1f8b742e80b517b21939 Mon Sep 17 00:00:00 2001 From: Kamil Kaminski Date: Fri, 28 Feb 2014 08:31:36 -0600 Subject: demo explicit need of calling copy ctor --- virtual_destructor.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 virtual_destructor.cpp (limited to 'virtual_destructor.cpp') diff --git a/virtual_destructor.cpp b/virtual_destructor.cpp new file mode 100644 index 0000000..75324c6 --- /dev/null +++ b/virtual_destructor.cpp @@ -0,0 +1,40 @@ +/* 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; +} -- cgit v1.2.3