summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-07-13 01:06:49 +0200
committerStanislaw Halik <sthalik@misaki.pl>2024-07-14 13:04:42 +0200
commitbbfb02609ef2a93b8fa0e97a5e298805f82d4f37 (patch)
treee897ad29e72bf6e3c8e56fcb903cda5adff93de8
parent7d309c5cdf61ec186046fc7d83e641853c8706ac (diff)
w
-rw-r--r--src/handle-page.hpp1
-rw-r--r--src/handle-page.inl4
-rw-r--r--test/handle.cpp8
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>;