title: Is it bad practice to call a virtual function from constructor of a class that is marked final
body: <p>Normally calling virtual functions from constructors is considered bad practice, because overridden functions in sub-objects will not be called as the objects have not been constructed yet.</p>
  
  <p>But, Consider the following classes:</p>
  
  <pre><code>class base
  {
  public:
     base() {}
     ~base() {}
  
  private:
     virtual void startFSM() = 0;
  };
  
  class derived final : public base
                      , public fsm_action_interface
  {
  public:
      derived() : base{}
                , theFSM_{}
      {  startFSM(); }
  
  
      /// FSM interface actions
  
  private:
     virtual void startFSM()
     { theFSM_.start(); }
  
  private:
      SomeFSMType theFSM_;
  }
  </code></pre>
  
  <p>In this case class <code>derived</code> is marked as <code>final</code> so no o further sub-objects can exist. Ergo the virtual call will resolve correctly (to the most derived type). </p>
  
  <p>Is it still considered bad practice?</p>