Horizon
horizon-eda-1.3.0
src
util
autofree_ptr.hpp
1
#pragma once
2
#include <functional>
3
4
namespace
horizon {
5
template
<
typename
T>
class
autofree_ptr
{
6
public
:
7
autofree_ptr
(T *p, std::function<
void
(T *)> ffn) : ptr(p), free_fn(ffn)
8
{
9
}
10
autofree_ptr
(std::function<
void
(T *)> ffn) : free_fn(ffn)
11
{
12
}
13
14
autofree_ptr
(
autofree_ptr
&&other)
15
{
16
ptr = other.ptr;
17
free_fn = other.free_fn;
18
other.ptr =
nullptr
;
19
}
20
autofree_ptr
&operator=(
autofree_ptr
&&) =
delete
;
21
22
autofree_ptr
(
autofree_ptr
const
&) =
delete
;
23
autofree_ptr
&operator=(
autofree_ptr
const
&) =
delete
;
24
25
T *ptr =
nullptr
;
26
std::function<void(T *)> free_fn;
27
28
T &operator*()
29
{
30
return
*ptr;
31
}
32
33
T *operator->()
const
34
{
35
return
ptr;
36
}
37
38
operator
T *()
const
39
{
40
return
ptr;
41
}
42
43
~
autofree_ptr
()
44
{
45
if
(ptr)
46
free_fn(ptr);
47
}
48
};
49
}
// namespace horizon
horizon::autofree_ptr
Definition:
autofree_ptr.hpp:5
Generated by
1.8.20