diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-07-13 01:06:49 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-07-14 13:04:42 +0200 |
commit | bbfb02609ef2a93b8fa0e97a5e298805f82d4f37 (patch) | |
tree | e897ad29e72bf6e3c8e56fcb903cda5adff93de8 | |
parent | 7d309c5cdf61ec186046fc7d83e641853c8706ac (diff) |
w
-rw-r--r-- | src/handle-page.hpp | 1 | ||||
-rw-r--r-- | src/handle-page.inl | 4 | ||||
-rw-r--r-- | test/handle.cpp | 8 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/handle-page.hpp b/src/handle-page.hpp index 057a512e..bf7ecdad 100644 --- a/src/handle-page.hpp +++ b/src/handle-page.hpp @@ -9,6 +9,7 @@ namespace floormat::impl_handle { template<typename Obj, uint32_t PageSize> struct Item { + ~Item() noexcept; union { char empty = {}; Obj object; }; Handle<Obj, PageSize> handle; uint32_t next; diff --git a/src/handle-page.inl b/src/handle-page.inl index 8a8bd489..70837e0c 100644 --- a/src/handle-page.inl +++ b/src/handle-page.inl @@ -6,6 +6,10 @@ namespace floormat::impl_handle { template<typename Obj, uint32_t PageSize> +Item<Obj, PageSize>::~Item() noexcept +{} + +template<typename Obj, uint32_t PageSize> void Page<Obj, PageSize>::do_deallocate(Item<Obj, PageSize>& item) { item.object.~Obj(); diff --git a/test/handle.cpp b/test/handle.cpp index 2b52b04e..563e56ae 100644 --- a/test/handle.cpp +++ b/test/handle.cpp @@ -8,7 +8,13 @@ namespace floormat { namespace { constexpr uint32_t start_index = 1024, page_size = 128; -struct Foo { int value = 0; }; + +struct Foo +{ + int value = 0; + ~Foo() { value = 0; } +}; + using Page = impl_handle::Page<Foo, page_size>; using Handle = impl_handle::Handle<Foo, page_size>; |