Add virtual destructors where they are needed to remove compilations errors.
diff --git a/expressions/table_generator/GenerateSeriesHandle.hpp b/expressions/table_generator/GenerateSeriesHandle.hpp
index 594f12b..bfb4ab5 100644
--- a/expressions/table_generator/GenerateSeriesHandle.hpp
+++ b/expressions/table_generator/GenerateSeriesHandle.hpp
@@ -46,6 +46,8 @@
  */
 class GenerateSeriesHandle : public GeneratorFunctionHandle {
  public:
+  ~GenerateSeriesHandle() override {};
+
   int getNumberOfOutputColumns() const override {
     return 1;
   }
diff --git a/expressions/table_generator/GeneratorFunctionHandle.hpp b/expressions/table_generator/GeneratorFunctionHandle.hpp
index b2fc068..394749f 100644
--- a/expressions/table_generator/GeneratorFunctionHandle.hpp
+++ b/expressions/table_generator/GeneratorFunctionHandle.hpp
@@ -59,6 +59,8 @@
  **/
 class GeneratorFunctionHandle {
  public:
+  virtual ~GeneratorFunctionHandle() {}
+
   /**
    * @brief Get the number of output columns of this generator function.
    *
diff --git a/third_party/src/tmb/tests/message_bus_unittest_common.h b/third_party/src/tmb/tests/message_bus_unittest_common.h
index e0994da..69df005 100644
--- a/third_party/src/tmb/tests/message_bus_unittest_common.h
+++ b/third_party/src/tmb/tests/message_bus_unittest_common.h
@@ -61,6 +61,8 @@
   Thread() {
   }
 
+  virtual ~Thread() {}
+
   void Start() {
     internal_thread_ = std::thread(Thread::ExecuteRunMethodOfThread, this);
   }
@@ -196,6 +198,8 @@
         num_clients_(num_clients) {
   }
 
+  ~ConnectorThread() override {};
+
   const std::unordered_set<client_id>& assigned_ids() const {
     return assigned_ids_;
   }
@@ -205,7 +209,7 @@
   }
 
  protected:
-  void Run() {
+  void Run() override {
     for (std::size_t client_idx = 0; client_idx < num_clients_; ++client_idx) {
       client_id current_client = message_bus_ptr_->Connect();
       EXPECT_EQ(assigned_ids_.end(), assigned_ids_.find(current_client));
@@ -656,6 +660,8 @@
         receiver_id_(sender_id) {
   }
 
+  ~SimpleReceiverThread() override {};
+
   // Spins until the receiver id is actually available.
   client_id GetReceiverID() const {
     client_id receiver_id = receiver_id_.load();
@@ -671,7 +677,7 @@
   }
 
  protected:
-  void Run() {
+  void Run() override {
     const client_id receiver_id = message_bus_ptr_->Connect();
     EXPECT_TRUE(message_bus_ptr_->RegisterClientAsReceiver(receiver_id, 0));
     receiver_id_.store(receiver_id);
@@ -780,6 +786,8 @@
         sender_id_(receiver_id) {
   }
 
+  ~SimpleSenderThread() override {}
+
   // Spins until the sender id is actually available.
   client_id GetSenderID() const {
     client_id sender_id = sender_id_.load();
@@ -791,7 +799,7 @@
   }
 
  protected:
-  void Run() {
+  void Run() override {
     const client_id sender_id = message_bus_ptr_->Connect();
     EXPECT_TRUE(message_bus_ptr_->RegisterClientAsSender(sender_id, 0));
     sender_id_.store(sender_id);
@@ -2219,8 +2227,10 @@
     EXPECT_TRUE(message_bus_ptr_->RegisterClientAsReceiver(me_, 1));
   }
 
+  ~ClientThread() override {};
+
  protected:
-  void Run() {
+  void Run() override {
     Address addr;
     addr.AddRecipient(server_);
     MessageStyle style;
@@ -2258,12 +2268,14 @@
     EXPECT_TRUE(message_bus_ptr_->RegisterClientAsReceiver(me_, 0));
   }
 
+  ~ServerThread() override {};
+
   client_id GetID() const {
     return me_;
   }
 
  protected:
-  void Run() {
+  void Run() override {
     MessageStyle style;
     for (int i = 0; i < num_messages_; ++i) {
       AnnotatedMessage request = message_bus_ptr_->Receive(me_);
diff --git a/utility/lip_filter/BitVectorExactFilter.hpp b/utility/lip_filter/BitVectorExactFilter.hpp
index 48fd5e1..7b66a04 100644
--- a/utility/lip_filter/BitVectorExactFilter.hpp
+++ b/utility/lip_filter/BitVectorExactFilter.hpp
@@ -69,6 +69,8 @@
     DCHECK_GE(max_value_, min_value_);
   }
 
+  ~BitVectorExactFilter() override {};
+
   void insertValueAccessor(ValueAccessor *accessor,
                            const attribute_id attr_id,
                            const Type *attr_type) override {
diff --git a/utility/lip_filter/LIPFilter.hpp b/utility/lip_filter/LIPFilter.hpp
index ba38264..6882328 100644
--- a/utility/lip_filter/LIPFilter.hpp
+++ b/utility/lip_filter/LIPFilter.hpp
@@ -47,6 +47,8 @@
  */
 class LIPFilter {
  public:
+  virtual ~LIPFilter() {}
+
   /**
    * @breif Get the type of this LIPFilter.
    *
diff --git a/utility/lip_filter/SingleIdentityHashFilter.hpp b/utility/lip_filter/SingleIdentityHashFilter.hpp
index d7e3475..ddea2f1 100644
--- a/utility/lip_filter/SingleIdentityHashFilter.hpp
+++ b/utility/lip_filter/SingleIdentityHashFilter.hpp
@@ -66,6 +66,8 @@
     DCHECK_GE(filter_cardinality, 1u);
   }
 
+  ~SingleIdentityHashFilter() override {};
+
   void insertValueAccessor(ValueAccessor *accessor,
                            const attribute_id attr_id,
                            const Type *attr_type) override {
diff --git a/utility/tests/TemplateUtil_unittest.cpp b/utility/tests/TemplateUtil_unittest.cpp
index ce5d662..129ac6a 100644
--- a/utility/tests/TemplateUtil_unittest.cpp
+++ b/utility/tests/TemplateUtil_unittest.cpp
@@ -53,6 +53,8 @@
 
 class BaseClass {
  public:
+  virtual ~BaseClass() {}
+
   virtual std::string toString() const = 0;
 };
 
@@ -63,6 +65,8 @@
       : a1_(a1), a2_(std::forward<SomeArgType>(a2)) {
   }
 
+  ~SomeClass() override {};
+
   std::string toString() const override {
     std::ostringstream oss;
     oss << "{ ";