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

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -