From cb5fcd60e966d5d096ba851951abc85a101eba7e Mon Sep 17 00:00:00 2001 From: Antoine Fontaine Date: Fri, 30 Sep 2022 09:56:32 +0200 Subject: [PATCH] Cleanup more the entities once they get destructed Supposedly fixes https://github.com/Unvanquished/Unvanquished/issues/1939 --- templates/Backend.cpp | 17 +++++++++++++++++ templates/Backend.h | 5 +++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/templates/Backend.cpp b/templates/Backend.cpp index 7048683..1a2a438 100644 --- a/templates/Backend.cpp +++ b/templates/Backend.cpp @@ -63,6 +63,23 @@ Entity::Entity(const MessageHandler *messageHandlers, const int* componentOffset {} +// empty vtables for the destructor +const int emptyComponentOffsets[] = { + {% for component in components %} + 0, + {% endfor %} +}; +const MessageHandler emptyMessageHandlers[] = { + {% for message in messages %} + nullptr, + {% endfor %} +}; + +Entity::~Entity() { + componentOffsets = emptyComponentOffsets; + messageHandlers = emptyMessageHandlers; +} + // Base entity's message dispatcher. bool Entity::SendMessage(EntityMessage msg, const void* data) { MessageHandler handler = messageHandlers[static_cast(msg)]; diff --git a/templates/Backend.h b/templates/Backend.h index 2306736..50ebc6c 100644 --- a/templates/Backend.h +++ b/templates/Backend.h @@ -123,9 +123,10 @@ class Entity { ); /** - * @brief Base entity deconstructor. + * @brief Base entity deconstructor. It does reset the vtables in + * addition to what inheriting constructors do */ - virtual ~Entity() = default; + virtual ~Entity(); // /////////////// // // Message helpers //