diff --git a/deps/ox/src/ox/std/memory.hpp b/deps/ox/src/ox/std/memory.hpp index a2e8fe413..f07b2b13f 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); } };