c++ - How do virtual destructors work? -
few hours fiddling memory leak issue , turned out got basic stuff virtual destructors wrong! let me put explain class design.
class base { virtual push_elements() {} }; class derived:public base { vector<int> x; public: void push_elements(){ for(int i=0;i <5;i++) x.push_back(i); } }; void main() { base* b = new derived(); b->push_elements(); delete b; }
the bounds checker tool reported memory leak in derived class vector. , figured out destructor not virtual , derived class destructor not called. , surprisingly got fixed when made destructor virtual. isn't vector deallocated automatically if derived class destructor not called? quirk in boundschecker tool or understanding of virtual destructor wrong?
deleting derived-class object through base-class pointer when base class not have virtual destructor leads undefined behavior.
what you've observed (that derived-class portion of object never gets destroyed , therefore members never deallocated) common of many possible behaviors, , example of why it's important make sure destructors virtual when use polymorphism way.
Comments
Post a Comment