ORIGINAL
Loading...
Searching...
No Matches
deleter.h
Go to the documentation of this file.
1#ifndef DELETER_H
2#define DELETER_H
3
17namespace original {
29 template<typename TYPE, template<typename> class DERIVED>
31 public:
36 template<typename T>
37 using rebound_deleter = DERIVED<T>;
38
43 constexpr deleterBase() noexcept = default;
44
49 virtual ~deleterBase() = 0;
50
57 virtual void operator()(const TYPE* ptr) const noexcept = 0;
58 };
59
68 template<typename TYPE, template<typename> class DERIVED>
69 class deleterBase<TYPE[], DERIVED> {
70 public:
75 template<typename T>
76 using rebound_deleter = DERIVED<T>;
77
81 constexpr deleterBase() noexcept = default;
82
87 virtual ~deleterBase() = 0;
88
95 virtual void operator()(const TYPE* ptr) const noexcept = 0;
96 };
97
108 template<typename TYPE>
109 class deleter final : public deleterBase<TYPE, deleter>{
110 public:
114 constexpr deleter() noexcept = default;
115
119 ~deleter() override = default;
120
127 void operator()(const TYPE* ptr) const noexcept override;
128 };
129
140 template<typename TYPE>
141 class deleter<TYPE[]> final : public deleterBase<TYPE[], deleter>{
142 public:
146 constexpr deleter() noexcept = default;
147
151 ~deleter() override = default;
152
158 void operator()(const TYPE* ptr) const noexcept override;
159 };
160}
161
162template<typename TYPE, template<typename> class DERIVED>
163original::deleterBase<TYPE, DERIVED>::~deleterBase() = default;
164
165template<typename TYPE, template<typename> class DERIVED>
166original::deleterBase<TYPE[], DERIVED>::~deleterBase() = default;
167
168template<typename TYPE>
169void original::deleter<TYPE>::operator()(const TYPE* ptr) const noexcept {
170 delete ptr;
171}
172
173template<typename TYPE>
174void original::deleter<TYPE[]>::operator()(const TYPE* ptr) const noexcept {
175 delete[] ptr;
176}
177
178#endif //DELETER_H
DERIVED< T > rebound_deleter
Rebound deleter type for type transformation scenarios.
Definition deleter.h:76
constexpr deleterBase() noexcept=default
Default constructor.
Base class for deleters defining the deletion policy interface.
Definition deleter.h:30
constexpr deleterBase() noexcept=default
Default constructor.
DERIVED< T > rebound_deleter
Rebound deleter type for type transformation scenarios.
Definition deleter.h:37
constexpr deleter() noexcept=default
Default constructor.
Default deletion policy for single objects.
Definition deleter.h:109
constexpr deleter() noexcept=default
Default constructor.
void operator()(const TYPE *ptr) const noexcept override
Deletes a single object.
Definition deleter.h:169
Main namespace for the project Original.
Definition algorithms.h:21