owning_wrapper.hpp
1 
6 #pragma once
7 
8 #include <memory>
9 
10 namespace rapidsmpf {
11 
43  public:
45  using deleter_type = void (*)(void*);
46 
47  OwningWrapper() = default;
48 
55  explicit OwningWrapper(void* obj, deleter_type deleter)
56  : obj_{owning_type(obj, deleter)} {}
57 
63  [[nodiscard]] void* release() noexcept {
64  return obj_.release();
65  }
66 
70  [[nodiscard]] void* get() const noexcept {
71  return obj_.get();
72  }
73 
74  private:
75  using owning_type = std::unique_ptr<void, deleter_type>;
76  owning_type obj_{nullptr, [](void*) {}};
77 };
78 } // namespace rapidsmpf
Utility class to store an arbitrary type-erased object while another object is alive.
void * release() noexcept
Release ownership of the underlying pointer.
void * get() const noexcept
void(*)(void *) deleter_type
Callback used to delete the owned object.
OwningWrapper(void *obj, deleter_type deleter)
Take ownership and responsibility for the destruction of an object.