diff options
Diffstat (limited to 'src/core/function/basic/ChannelObject.h')
-rw-r--r-- | src/core/function/basic/ChannelObject.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/function/basic/ChannelObject.h b/src/core/function/basic/ChannelObject.h index 9d247e6a..7bbd6d94 100644 --- a/src/core/function/basic/ChannelObject.h +++ b/src/core/function/basic/ChannelObject.h @@ -28,6 +28,7 @@ #pragma once +#include "core/function/SecureMemoryAllocator.h" namespace GpgFrontend { static constexpr int kGpgFrontendDefaultChannel = @@ -46,6 +47,12 @@ class GPGFRONTEND_CORE_EXPORT ChannelObject { ChannelObject() noexcept; /** + * @brief Destroy the Channel Object object + * + */ + virtual ~ChannelObject() noexcept; + + /** * @brief Construct a new Channel Object object * * @param channel @@ -77,4 +84,16 @@ class GPGFRONTEND_CORE_EXPORT ChannelObject { int channel_ = kGpgFrontendDefaultChannel; ///< The channel id }; +template <typename Derived> +auto ConvertToChannelObjectPtr( + std::unique_ptr<Derived, SecureObjectDeleter<Derived>> derivedPtr) + -> std::unique_ptr<ChannelObject, SecureObjectDeleter<ChannelObject>> { + static_assert(std::is_base_of_v<ChannelObject, Derived>, + "Derived must be a subclass of ChannelObject"); + + ChannelObject* base_ptr = derivedPtr.release(); + return std::unique_ptr<ChannelObject, SecureObjectDeleter<ChannelObject>>( + base_ptr); +} + } // namespace GpgFrontend
\ No newline at end of file |