From af3d564e89ceeda506cbce8ff329ee14c769f9a5 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 31 Oct 2020 13:00:47 +0100 Subject: Remove use of std::unique_ptr Although it's generally a good idea to use known-solid std classes, in this case the wrapper is very simple so it's not worth including . --- bindings/cxx/include/pugl/pugl.hpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'bindings/cxx/include/pugl/pugl.hpp') diff --git a/bindings/cxx/include/pugl/pugl.hpp b/bindings/cxx/include/pugl/pugl.hpp index 965540d..d5a91fb 100644 --- a/bindings/cxx/include/pugl/pugl.hpp +++ b/bindings/cxx/include/pugl/pugl.hpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include @@ -47,12 +46,6 @@ namespace detail { template using FreeFunc = void (*)(T*); -/// Simple overhead-free deleter for a C object -template Free> -struct Deleter { - void operator()(T* ptr) { Free(ptr); } -}; - /// Generic C++ wrapper for a C object template Free> class Wrapper @@ -61,19 +54,30 @@ public: Wrapper(const Wrapper&) = delete; Wrapper& operator=(const Wrapper&) = delete; - Wrapper(Wrapper&&) noexcept = default; - Wrapper& operator=(Wrapper&&) noexcept = default; + Wrapper(Wrapper&& wrapper) noexcept + : _ptr{wrapper._ptr} + { + wrapper._ptr = nullptr; + } + + Wrapper& operator=(Wrapper&& wrapper) noexcept + { + _ptr = wrapper._ptr; + wrapper._ptr = nullptr; + } + + ~Wrapper() noexcept { Free(_ptr); } - T* cobj() noexcept { return _ptr.get(); } - const T* cobj() const noexcept { return _ptr.get(); } + T* cobj() noexcept { return _ptr; } + const T* cobj() const noexcept { return _ptr; } protected: explicit Wrapper(T* ptr) noexcept - : _ptr(ptr, Deleter{}) + : _ptr{ptr} {} private: - std::unique_ptr> _ptr; + T* _ptr; }; } // namespace detail -- cgit v1.2.1