25 class CustomDelete :
public std::function<void(std::remove_extent_t<T> *)>
28 using T_decayed = std::remove_extent_t<T>;
31 using deleter_type = std::function<void(T_decayed *)>;
38 : deleter_type{[]([[maybe_unused]] T_decayed *ptr) {
39 if constexpr (std::is_void_v<T_decayed>)
41 std::cerr <<
"[Warning] Cannot standard-delete a void-type "
42 "pointer. Please specify a custom destructor. "
43 "Will let the memory leak."
48 std::default_delete<T>{}(ptr);
53 CustomDelete(deleter_type func) : deleter_type(std::move(func))
77 :
public std::unique_ptr<
79 auxiliary::CustomDelete<T>>
82 using BasePtr = std::unique_ptr<T, auxiliary::CustomDelete<T>>;
85 using T_decayed = std::remove_extent_t<T>;
105 template <
typename Del>
125 template <
typename U>
129 template <
typename T>
131 : BasePtr{stdPtr.release()}
134 template <
typename T>
135 template <
typename Del>
137 : BasePtr{ptr.release(), auxiliary::CustomDelete<
T>{[&]() {
138 if constexpr (std::is_copy_constructible_v<Del>)
140 return [deleter = std::move(ptr.get_deleter())](
141 T_decayed *del_ptr) { deleter(del_ptr); };
151 return [deleter = std::make_shared<Del>(
152 std::move(ptr.get_deleter()))](
153 T_decayed *del_ptr) { (*deleter)(del_ptr); };
158 template <
typename T>
162 template <
typename T>
164 T_decayed *ptr, std::function<
void(T_decayed *)> deleter)
165 : BasePtr{ptr, std::move(deleter)}
168 template <
typename T>
169 template <
typename U>
172 using other_type = std::remove_extent_t<U>;
174 static_cast<other_type *
>(this->release()),
175 [deleter = std::move(this->get_deleter())](other_type *ptr) {
176 deleter(
static_cast<T_decayed *
>(ptr));
Unique Pointer class that uses a dynamic destructor type.
Definition: UniquePtr.hpp:80
UniquePtrWithLambda(T_decayed *)
Construct from raw pointer with default deleter.
Definition: UniquePtr.hpp:159
UniquePtrWithLambda(T_decayed *, std::function< void(T_decayed *)>)
Construct from raw pointer with custom deleter.
Definition: UniquePtr.hpp:163
UniquePtrWithLambda(std::unique_ptr< T, Del >)
Conversion constructor from std::unique_ptr<T> with custom deleter.
Definition: UniquePtr.hpp:136
UniquePtrWithLambda(std::unique_ptr< T >)
Conversion constructor from std::unique_ptr<T> with default deleter.
Definition: UniquePtr.hpp:130
UniquePtrWithLambda< U > static_cast_() &&
Like std::static_pointer_cast.
Custom deleter type based on std::function.
Definition: UniquePtr.hpp:26
Public definitions of openPMD-api.
Definition: Date.cpp:29