title: virtual destructor for pure abstract class
body: <p>Based on what I found <a href="https://stackoverflow.com/questions/3336499/virtual-desctructor-on-pure-abstract-base-class">here</a> and on other links on stackoverflow, we should always define a virtual destructor in the base class if we plan to use it polymorphically. I want to know if there is an exception to this rule. </p>
  
  <p>I have seen production code that does not define virtual destructor for the pure abstract base classes and in one of cppcon 2014 video <a href="https://www.youtube.com/watch?v=QhJguzpZOrk&amp;t=603s" rel="noreferrer">Accept no visitor</a>, around 10:06 the  BoolExp struct defined is a pure abstract class and has no virtual destructor. </p>
  
  <p>So for a pure abstract class defined like this</p>
  
  <pre><code>  class Base {
        public:
           virtual foo() = 0;
           virtual bar() = 0;
       }
  </code></pre>
  
  <p>My question is it absolutely must that we define a virtual destructor for "Base" class, even though it does have any data members? Are there any exceptions to the virtual destructor rule?</p>
  
  <p>Thanks in advance.</p>
  
  <p>Best,
  RG</p>