diff options
Diffstat (limited to 'include/godot_cpp/core/memory.hpp')
-rw-r--r-- | include/godot_cpp/core/memory.hpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/include/godot_cpp/core/memory.hpp b/include/godot_cpp/core/memory.hpp index 3c98c19..1934ee4 100644 --- a/include/godot_cpp/core/memory.hpp +++ b/include/godot_cpp/core/memory.hpp @@ -82,6 +82,9 @@ public: static void free_static(void *p_ptr, bool p_pad_align = false); }; +template <typename T, std::enable_if_t<!std::is_base_of<::godot::Wrapped, T>::value, bool> = true> +_ALWAYS_INLINE_ void _pre_initialize() {} + _ALWAYS_INLINE_ void postinitialize_handler(void *) {} template <typename T> @@ -94,10 +97,10 @@ _ALWAYS_INLINE_ T *_post_initialize(T *p_obj) { #define memrealloc(m_mem, m_size) ::godot::Memory::realloc_static(m_mem, m_size) #define memfree(m_mem) ::godot::Memory::free_static(m_mem) -#define memnew(m_class) ::godot::_post_initialize(new ("", "") m_class) +#define memnew(m_class) (::godot::_pre_initialize<std::remove_pointer_t<decltype(new ("", "") m_class)>>(), ::godot::_post_initialize(new ("", "") m_class)) -#define memnew_allocator(m_class, m_allocator) ::godot::_post_initialize(new ("", m_allocator::alloc) m_class) -#define memnew_placement(m_placement, m_class) ::godot::_post_initialize(new ("", m_placement, sizeof(m_class), "") m_class) +#define memnew_allocator(m_class, m_allocator) (::godot::_pre_initialize<std::remove_pointer_t<decltype(new ("", "") m_class)>>(), ::godot::_post_initialize(new ("", m_allocator::alloc) m_class)) +#define memnew_placement(m_placement, m_class) (::godot::_pre_initialize<std::remove_pointer_t<decltype(new ("", "") m_class)>>(), ::godot::_post_initialize(new ("", m_placement, sizeof(m_class), "") m_class)) // Generic comparator used in Map, List, etc. template <typename T> |