SlHelpers
Loading...
Searching...
No Matches
Unique.h
1// SPDX-License-Identifier: GPL-2.0-only
2
3#pragma once
4
5#include <memory>
6
7namespace SlHelpers {
8
14template <typename T>
15class Deleter {
16public:
17 Deleter() = delete;
18
23 Deleter(bool free) : m_free(free) {}
24
29 void operator()(T *ptr) const;
30
32 using Unique = std::unique_ptr<T, Deleter<T>>;
33private:
34 bool m_free;
35};
36
40template <typename T>
41struct UniqueHolder : public Deleter<T>::Unique {
43 UniqueHolder() : UniqueHolder(nullptr) { }
44
50 UniqueHolder(T *ptr, bool free = true) : Deleter<T>::Unique(ptr, Deleter<T>{free}) {}
51
56 operator T *() const { return Deleter<T>::Unique::get(); }
57};
58
59}
The Deleter for UniqueHolder types.
Definition Unique.h:15
void operator()(T *ptr) const
The operator called to free the pointer ptr.
std::unique_ptr< T, Deleter< T > > Unique
Deleter and UniqueHolder are just wrappers around std::unique_ptr.
Definition Unique.h:32
Deleter(bool free)
Construct a Deleter.
Definition Unique.h:23
UniqueHolder()
Construct UniqueHolder holding a nullptr.
Definition Unique.h:43
UniqueHolder(T *ptr, bool free=true)
Construct UniqueHolder holding ptr.
Definition Unique.h:50