From af97a834c0e899b36be6c5ac00a0f9c5e29d7ede Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Mon, 21 Feb 2022 01:57:52 -0600 Subject: [PATCH] [ox/std] Add safeDelete functions --- deps/ox/src/ox/std/memory.hpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/deps/ox/src/ox/std/memory.hpp b/deps/ox/src/ox/std/memory.hpp index a2e8fe41..f07b2b13 100644 --- a/deps/ox/src/ox/std/memory.hpp +++ b/deps/ox/src/ox/std/memory.hpp @@ -37,10 +37,25 @@ struct allocator { namespace ox { +/* + * safeDelete exists because deleting an incomplete type will simply + * free the memory without running the destructor. + */ + +template +void safeDelete(T *val) requires(sizeof(T) >= 1) { + delete val; +} + +template +void safeDeleteArray(T *val) requires(sizeof(T) >= 1) { + delete[] val; +} + template struct DefaultDelete { constexpr void operator()(T *p) noexcept { - delete p; + safeDelete(p); } };