From 9645963ba2818a245dadfcf3efe8c9ed8e1d4411 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Sat, 7 Nov 2020 09:12:43 +0200
Subject: [PATCH] Add all destructors

---
 SDK/C++/private/feed_impl.hpp                   | 4 ++--
 SDK/C++/private/frame_impl.hpp                  | 2 +-
 SDK/C++/private/image_impl.hpp                  | 2 +-
 SDK/C++/private/observer_impl.cpp               | 3 ++-
 SDK/C++/private/observer_impl.hpp               | 2 +-
 SDK/C++/private/operator_impl.hpp               | 2 +-
 SDK/C++/private/pipeline_impl.hpp               | 2 +-
 SDK/C++/private/room_impl.cpp                   | 5 +++++
 SDK/C++/private/room_impl.hpp                   | 2 ++
 SDK/C++/private/system.cpp                      | 4 ++++
 SDK/C++/private/system_impl.hpp                 | 2 +-
 SDK/C++/public/include/voltu/feed.hpp           | 2 ++
 SDK/C++/public/include/voltu/observer.hpp       | 2 ++
 SDK/C++/public/include/voltu/operator.hpp       | 2 ++
 SDK/C++/public/include/voltu/pipeline.hpp       | 2 ++
 SDK/C++/public/include/voltu/room.hpp           | 2 ++
 SDK/C++/public/include/voltu/system.hpp         | 2 ++
 SDK/C++/public/include/voltu/types/frame.hpp    | 2 ++
 SDK/C++/public/include/voltu/types/image.hpp    | 2 ++
 SDK/C++/public/include/voltu/types/property.hpp | 2 ++
 20 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/SDK/C++/private/feed_impl.hpp b/SDK/C++/private/feed_impl.hpp
index 5cb9745b8..ba0ab72d7 100644
--- a/SDK/C++/private/feed_impl.hpp
+++ b/SDK/C++/private/feed_impl.hpp
@@ -13,7 +13,7 @@ class InputFeedImpl : public voltu::Feed
 {
 public:
 	InputFeedImpl(ftl::stream::Feed*, uint32_t fsid);
-	~InputFeedImpl();
+	~InputFeedImpl() override;
 	
 	std::string getURI() override;
 
@@ -34,7 +34,7 @@ class OutputFeedImpl : public voltu::Feed
 {
 public:
 	OutputFeedImpl(ftl::stream::Feed*, const std::string &uri);
-	~OutputFeedImpl();
+	~OutputFeedImpl() override;
 	
 	std::string getURI() override;
 
diff --git a/SDK/C++/private/frame_impl.hpp b/SDK/C++/private/frame_impl.hpp
index 98566e602..1b6074a8a 100644
--- a/SDK/C++/private/frame_impl.hpp
+++ b/SDK/C++/private/frame_impl.hpp
@@ -14,7 +14,7 @@ class FrameImpl : public voltu::Frame
 {
 public:
 	FrameImpl();
-	~FrameImpl();
+	~FrameImpl() override;
 
 	std::list<voltu::ImagePtr> getImageSet(voltu::Channel) override;
 
diff --git a/SDK/C++/private/image_impl.hpp b/SDK/C++/private/image_impl.hpp
index 189a1c19f..ac9a33c46 100644
--- a/SDK/C++/private/image_impl.hpp
+++ b/SDK/C++/private/image_impl.hpp
@@ -12,7 +12,7 @@ class ImageImpl : public voltu::Image
 {
 public:
 	ImageImpl(const ftl::rgbd::Frame&, ftl::codecs::Channel c);
-	~ImageImpl();
+	~ImageImpl() override;
 
 	voltu::ImageData getHost() override;
 
diff --git a/SDK/C++/private/observer_impl.cpp b/SDK/C++/private/observer_impl.cpp
index 325d24cf3..49563417c 100644
--- a/SDK/C++/private/observer_impl.cpp
+++ b/SDK/C++/private/observer_impl.cpp
@@ -28,7 +28,8 @@ ObserverImpl::ObserverImpl(ftl::Configurable *base)
 
 ObserverImpl::~ObserverImpl()
 {
-
+	delete rend_;
+	delete pool_;
 }
 
 void ObserverImpl::setResolution(uint32_t w, uint32_t h)
diff --git a/SDK/C++/private/observer_impl.hpp b/SDK/C++/private/observer_impl.hpp
index 817e2babd..dfccf7e59 100644
--- a/SDK/C++/private/observer_impl.hpp
+++ b/SDK/C++/private/observer_impl.hpp
@@ -17,7 +17,7 @@ class ObserverImpl : public voltu::Observer
 public:
 	explicit ObserverImpl(ftl::Configurable *base);
 
-	~ObserverImpl();
+	~ObserverImpl() override;
 
 	void setResolution(uint32_t w, uint32_t h) override;
 
diff --git a/SDK/C++/private/operator_impl.hpp b/SDK/C++/private/operator_impl.hpp
index cdbfff19b..cfe5d26ab 100644
--- a/SDK/C++/private/operator_impl.hpp
+++ b/SDK/C++/private/operator_impl.hpp
@@ -14,7 +14,7 @@ class OperatorImpl : public voltu::Operator
 {
 public:
 	OperatorImpl(ftl::Configurable*);
-	~OperatorImpl();
+	~OperatorImpl() override;
 
 	voltu::PropertyPtr property(const std::string &name) override;
 
diff --git a/SDK/C++/private/pipeline_impl.hpp b/SDK/C++/private/pipeline_impl.hpp
index 6764e5d19..98fe41c90 100644
--- a/SDK/C++/private/pipeline_impl.hpp
+++ b/SDK/C++/private/pipeline_impl.hpp
@@ -12,7 +12,7 @@ class PipelineImpl : public voltu::Pipeline
 {
 public:
 	PipelineImpl(ftl::Configurable *root);
-	~PipelineImpl();
+	~PipelineImpl() override;
 
 	void submit(const voltu::FramePtr &frame) override;
 
diff --git a/SDK/C++/private/room_impl.cpp b/SDK/C++/private/room_impl.cpp
index 9df583c86..76ab1b92b 100644
--- a/SDK/C++/private/room_impl.cpp
+++ b/SDK/C++/private/room_impl.cpp
@@ -11,6 +11,11 @@ RoomImpl::RoomImpl(ftl::stream::Feed* feed)
 
 }
 
+RoomImpl::~RoomImpl()
+{
+	if (filter_) filter_->remove();
+}
+
 bool RoomImpl::waitNextFrame(int64_t timeout)
 {
 	if (!filter_)
diff --git a/SDK/C++/private/room_impl.hpp b/SDK/C++/private/room_impl.hpp
index 6c57dfcbb..be8516a63 100644
--- a/SDK/C++/private/room_impl.hpp
+++ b/SDK/C++/private/room_impl.hpp
@@ -13,6 +13,8 @@ class RoomImpl : public voltu::Room
 {
 public:
 	explicit RoomImpl(ftl::stream::Feed*);
+	
+	~RoomImpl() override;
 
 	bool waitNextFrame(int64_t) override;
 
diff --git a/SDK/C++/private/system.cpp b/SDK/C++/private/system.cpp
index a84d579eb..b93a4bdc6 100644
--- a/SDK/C++/private/system.cpp
+++ b/SDK/C++/private/system.cpp
@@ -45,7 +45,11 @@ SystemImpl::SystemImpl()
 SystemImpl::~SystemImpl()
 {
 	ftl::timer::stop(true);
+	net_->shutdown();
 	ftl::pool.stop(true);
+	delete feed_;
+	delete net_;
+	delete root_;
 }
 
 voltu::Version SystemImpl::getVersion() const
diff --git a/SDK/C++/private/system_impl.hpp b/SDK/C++/private/system_impl.hpp
index 474b2ebe6..dfc2fae09 100644
--- a/SDK/C++/private/system_impl.hpp
+++ b/SDK/C++/private/system_impl.hpp
@@ -14,7 +14,7 @@ class SystemImpl : public voltu::System
 {
 public:
 	SystemImpl();
-	~SystemImpl();
+	~SystemImpl() override;
 
 	voltu::Version getVersion() const override;
 
diff --git a/SDK/C++/public/include/voltu/feed.hpp b/SDK/C++/public/include/voltu/feed.hpp
index be1a0fc0d..0a19d3017 100644
--- a/SDK/C++/public/include/voltu/feed.hpp
+++ b/SDK/C++/public/include/voltu/feed.hpp
@@ -35,6 +35,8 @@ enum class FeedProperty
 class Feed
 {
 public:
+	virtual ~Feed() = default;
+	
 	PY_API virtual std::string getURI() = 0;
 
 	PY_API virtual void remove() = 0;
diff --git a/SDK/C++/public/include/voltu/observer.hpp b/SDK/C++/public/include/voltu/observer.hpp
index 352fe8aaa..f42ffaf9a 100644
--- a/SDK/C++/public/include/voltu/observer.hpp
+++ b/SDK/C++/public/include/voltu/observer.hpp
@@ -25,6 +25,8 @@ enum class ObserverProperty
 class Observer
 {
 public:
+	virtual ~Observer() = default;
+	
 	PY_API virtual void setResolution(uint32_t w, uint32_t h) = 0;
 
 	PY_API virtual void setFocalLength(uint32_t f) = 0;
diff --git a/SDK/C++/public/include/voltu/operator.hpp b/SDK/C++/public/include/voltu/operator.hpp
index 9ffc64c99..a7f4ce996 100644
--- a/SDK/C++/public/include/voltu/operator.hpp
+++ b/SDK/C++/public/include/voltu/operator.hpp
@@ -20,6 +20,8 @@ enum class OperatorId
 class Operator
 {
 public:
+	virtual ~Operator() = default;
+	
 	PY_API virtual voltu::PropertyPtr property(const std::string &name) = 0;
 };
 
diff --git a/SDK/C++/public/include/voltu/pipeline.hpp b/SDK/C++/public/include/voltu/pipeline.hpp
index 994b4af91..c9894f063 100644
--- a/SDK/C++/public/include/voltu/pipeline.hpp
+++ b/SDK/C++/public/include/voltu/pipeline.hpp
@@ -11,6 +11,8 @@ namespace voltu
 class Pipeline
 {
 public:
+	virtual ~Pipeline() = default;
+	
 	PY_API virtual void submit(const voltu::FramePtr &frame) = 0;
 
 	PY_API virtual bool waitCompletion(int timeout) = 0;
diff --git a/SDK/C++/public/include/voltu/room.hpp b/SDK/C++/public/include/voltu/room.hpp
index da0977622..4971439b8 100644
--- a/SDK/C++/public/include/voltu/room.hpp
+++ b/SDK/C++/public/include/voltu/room.hpp
@@ -19,6 +19,8 @@ typedef unsigned int RoomId;
 class Room
 {
 public:
+	virtual ~Room() = default;
+	
 	PY_API virtual bool waitNextFrame(int64_t) = 0;
 
 	PY_API inline bool hasNextFrame() { return waitNextFrame(0); };
diff --git a/SDK/C++/public/include/voltu/system.hpp b/SDK/C++/public/include/voltu/system.hpp
index 6a5436983..0f35bc88c 100644
--- a/SDK/C++/public/include/voltu/system.hpp
+++ b/SDK/C++/public/include/voltu/system.hpp
@@ -24,6 +24,8 @@ struct Version
 class System
 {
 public:
+	virtual ~System() = default;
+	
 	/** Get the semantic version information. */
 	virtual voltu::Version getVersion() const = 0;
 
diff --git a/SDK/C++/public/include/voltu/types/frame.hpp b/SDK/C++/public/include/voltu/types/frame.hpp
index c9a02abaa..eebc557ea 100644
--- a/SDK/C++/public/include/voltu/types/frame.hpp
+++ b/SDK/C++/public/include/voltu/types/frame.hpp
@@ -14,6 +14,8 @@ namespace voltu
 class Frame
 {
 public:
+	virtual ~Frame() = default;
+	
 	PY_API PY_RV_LIFETIME_PARENT virtual std::list<voltu::ImagePtr> getImageSet(voltu::Channel channel) = 0;
 
 	PY_API PY_RV_LIFETIME_PARENT virtual voltu::PointCloudPtr getPointCloud(voltu::PointCloudFormat cloudfmt, voltu::PointFormat pointfmt) = 0;
diff --git a/SDK/C++/public/include/voltu/types/image.hpp b/SDK/C++/public/include/voltu/types/image.hpp
index 76d5ec5f0..6064f894d 100644
--- a/SDK/C++/public/include/voltu/types/image.hpp
+++ b/SDK/C++/public/include/voltu/types/image.hpp
@@ -30,6 +30,8 @@ PY_NO_SHARED_PTR struct ImageData
 class Image
 {
 public:
+	virtual ~Image() = default;
+	
 	PY_API PY_RV_LIFETIME_PARENT virtual ImageData getHost() = 0;
 
 	virtual ImageData getDevice() = 0;
diff --git a/SDK/C++/public/include/voltu/types/property.hpp b/SDK/C++/public/include/voltu/types/property.hpp
index 2fa3c43b4..979cb793b 100644
--- a/SDK/C++/public/include/voltu/types/property.hpp
+++ b/SDK/C++/public/include/voltu/types/property.hpp
@@ -9,6 +9,8 @@ namespace voltu
 class Property
 {
 public:
+	virtual ~Property() = default;
+	
 	PY_API virtual void setInt(int) = 0;
 
 	PY_API virtual void setFloat(float) = 0;
-- 
GitLab