diff --git a/src/discrete_threshold.hpp b/src/discrete_threshold.hpp
index 1284461..537a43a 100644
--- a/src/discrete_threshold.hpp
+++ b/src/discrete_threshold.hpp
@@ -29,8 +29,11 @@
         Milliseconds dwellTime, const std::string& thresholdValue,
         const std::string& name, const discrete::Severity severity,
         std::unique_ptr<interfaces::Clock> clock);
+    ~DiscreteThreshold() = default;
     DiscreteThreshold(const DiscreteThreshold&) = delete;
+    DiscreteThreshold& operator=(const DiscreteThreshold&) = delete;
     DiscreteThreshold(DiscreteThreshold&&) = delete;
+    DiscreteThreshold& operator=(DiscreteThreshold&&) = delete;
 
     void initialize() override;
     void sensorUpdated(interfaces::Sensor&, Milliseconds, double) override;
@@ -58,8 +61,11 @@
                         boost::asio::io_context& ioc) :
             timer(ioc), sensorName(sensorNameIn)
         {}
+        ~ThresholdDetail() = default;
         ThresholdDetail(const ThresholdDetail&) = delete;
+        ThresholdDetail& operator=(const ThresholdDetail&) = delete;
         ThresholdDetail(ThresholdDetail&&) = delete;
+        ThresholdDetail& operator=(ThresholdDetail&&) = delete;
 
         const std::string& getSensorName()
         {
diff --git a/src/numeric_threshold.hpp b/src/numeric_threshold.hpp
index 5337624..d15530b 100644
--- a/src/numeric_threshold.hpp
+++ b/src/numeric_threshold.hpp
@@ -29,8 +29,11 @@
         Milliseconds dwellTime, numeric::Direction direction,
         double thresholdValue, numeric::Type type,
         std::unique_ptr<interfaces::Clock> clock);
+    ~NumericThreshold() = default;
     NumericThreshold(const NumericThreshold&) = delete;
+    NumericThreshold& operator=(const NumericThreshold&) = delete;
     NumericThreshold(NumericThreshold&&) = delete;
+    NumericThreshold& operator=(NumericThreshold&&) = delete;
 
     void initialize() override;
     void sensorUpdated(interfaces::Sensor&, Milliseconds, double) override;
@@ -59,8 +62,11 @@
                         boost::asio::io_context& ioc) :
             timer(ioc), sensorName(sensorNameIn)
         {}
+        ~ThresholdDetail() = default;
         ThresholdDetail(const ThresholdDetail&) = delete;
+        ThresholdDetail& operator=(const ThresholdDetail&) = delete;
         ThresholdDetail(ThresholdDetail&&) = delete;
+        ThresholdDetail& operator=(ThresholdDetail&&) = delete;
 
         const std::string& getSensorName()
         {
diff --git a/src/on_change_threshold.hpp b/src/on_change_threshold.hpp
index 91a595f..dd193f2 100644
--- a/src/on_change_threshold.hpp
+++ b/src/on_change_threshold.hpp
@@ -23,8 +23,11 @@
         const std::string& triggerId, Sensors sensors,
         std::vector<std::unique_ptr<interfaces::TriggerAction>> actions,
         std::unique_ptr<interfaces::Clock> clock);
+    ~OnChangeThreshold() = default;
     OnChangeThreshold(const OnChangeThreshold&) = delete;
+    OnChangeThreshold& operator=(const OnChangeThreshold&) = delete;
     OnChangeThreshold(OnChangeThreshold&&) = delete;
+    OnChangeThreshold& operator=(OnChangeThreshold&&) = delete;
 
     void initialize() override;
     void sensorUpdated(interfaces::Sensor&, Milliseconds, double) override;
diff --git a/src/report.hpp b/src/report.hpp
index 2fbd078..73d7f15 100644
--- a/src/report.hpp
+++ b/src/report.hpp
@@ -34,6 +34,10 @@
       public:
         OnChangeContext(Report& report) : report(report) {}
 
+        OnChangeContext(const OnChangeContext&) = delete;
+        OnChangeContext& operator=(const OnChangeContext&) = delete;
+        OnChangeContext(OnChangeContext&&) = delete;
+        OnChangeContext& operator=(OnChangeContext&&) = delete;
         ~OnChangeContext()
         {
             if (updated)
diff --git a/src/sensor.hpp b/src/sensor.hpp
index 0e6c2c0..ee54eba 100644
--- a/src/sensor.hpp
+++ b/src/sensor.hpp
@@ -22,8 +22,11 @@
            boost::asio::io_context& ioc,
            const std::shared_ptr<sdbusplus::asio::connection>& bus);
 
+    ~Sensor() = default;
     Sensor(const Sensor&) = delete;
     Sensor& operator=(const Sensor&) = delete;
+    Sensor(Sensor&&) = delete;
+    Sensor& operator=(Sensor&&) = delete;
 
     static Id makeId(std::string_view service, std::string_view path);
 
diff --git a/src/trigger.hpp b/src/trigger.hpp
index c0b2845..e5bfac4 100644
--- a/src/trigger.hpp
+++ b/src/trigger.hpp
@@ -28,6 +28,7 @@
             const interfaces::TriggerFactory& triggerFactory,
             Sensors sensorsIn);
 
+    ~Trigger() = default;
     Trigger(const Trigger&) = delete;
     Trigger(Trigger&&) = delete;
     Trigger& operator=(const Trigger&) = delete;
diff --git a/src/trigger_actions.cpp b/src/trigger_actions.cpp
index 5b57abb..1d984e5 100644
--- a/src/trigger_actions.cpp
+++ b/src/trigger_actions.cpp
@@ -108,7 +108,8 @@
     double value = std::get<double>(triggerValue);
     auto messageId = getRedfishMessageId(value);
 
-    if (messageId == redfish_message_ids::TriggerNumericReadingNormal)
+    if (std::string_view(messageId) ==
+        redfish_message_ids::TriggerNumericReadingNormal)
     {
         phosphor::logging::log<phosphor::logging::level::INFO>(
             "Logging numeric trigger action to Redfish Event Log.",
diff --git a/src/trigger_manager.hpp b/src/trigger_manager.hpp
index 79376c4..a18a72a 100644
--- a/src/trigger_manager.hpp
+++ b/src/trigger_manager.hpp
@@ -19,6 +19,7 @@
         std::unique_ptr<interfaces::JsonStorage> triggerStorage,
         const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
 
+    ~TriggerManager() = default;
     TriggerManager(const TriggerManager&) = delete;
     TriggerManager(TriggerManager&&) = delete;
     TriggerManager& operator=(const TriggerManager&) = delete;
diff --git a/src/utils/messanger.hpp b/src/utils/messanger.hpp
index a2a2c22..547e725 100644
--- a/src/utils/messanger.hpp
+++ b/src/utils/messanger.hpp
@@ -16,6 +16,11 @@
         context_(service_.create())
     {}
 
+    MessangerT(const MessangerT&) = delete;
+    MessangerT& operator=(const MessangerT&) = delete;
+    MessangerT(MessangerT&&) = delete;
+    MessangerT& operator=(MessangerT&&) = delete;
+
     ~MessangerT()
     {
         service_.destroy(context_);
