Skip to main content

ErasedUnique.ixx File

Type-erased unique ownership wrapper. More...

Included Headers

#include <memory>

Namespaces Index

namespacehelios
namespaceengine
namespacecore
namespacememory

Classes Index

structErasedUnique

Type-erased unique ownership wrapper. More...

Description

Type-erased unique ownership wrapper.

File Listing

The file content with the documentation metadata removed is:

1
5module;
6
7#include <memory>
8
9export module helios.engine.core.memory.ErasedUnique;
10
12
31 struct ErasedUnique {
32
36 void* ptr = nullptr;
37
41 void (*destroy)(void*) noexcept = nullptr;
42
46 ErasedUnique() = default;
47
57 template<class T>
58 explicit ErasedUnique(std::unique_ptr<T> p) noexcept
59 : ptr(p.release()),
60 destroy([](void* q) noexcept { delete static_cast<T*>(q); })
61 {}
62
69 obj.ptr = nullptr;
70 obj.destroy = nullptr;
71 }
72
81 if (this != &obj) {
82 reset();
83 ptr = obj.ptr; destroy = obj.destroy;
84 obj.ptr = nullptr;
85 obj.destroy = nullptr;
86 }
87 return *this;
88 }
89
94
98 void reset() noexcept {
99 if (ptr && destroy) {
100 destroy(ptr);
101 }
102 ptr = nullptr;
103 destroy = nullptr;
104 }
105 };
106
107
108}

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.