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 << "{ ";
