diff --git a/gateway/include/ha.h b/gateway/include/ha.h index 2337936..64296b6 100644 --- a/gateway/include/ha.h +++ b/gateway/include/ha.h @@ -96,13 +96,27 @@ namespace Ha { List Component::components; - template - struct Builder { + struct AbstractBuilder { + static List builders; + + AbstractBuilder() { + builders.add(this); + } + + static void deleteAll() { + List::exec(builders, [](AbstractBuilder* builder) + { delete builder; }); + } + }; + List AbstractBuilder::builders; + + template + struct Builder : AbstractBuilder { T* cmp; - Builder() {} - Builder(T* cmp) : cmp(cmp) {} - Builder(const char* id) { + Builder() : AbstractBuilder() {} + Builder(T* cmp) : AbstractBuilder(), cmp(cmp) {} + Builder(const char* id) : AbstractBuilder() { cmp = new T{id}; } diff --git a/gateway/include/mqtt.h b/gateway/include/mqtt.h index fecea33..a3553ea 100644 --- a/gateway/include/mqtt.h +++ b/gateway/include/mqtt.h @@ -68,6 +68,7 @@ namespace Mqtt { Ha::publisher = publish; List::exec(Component::components, [](Component* c) { publishComponentConfig(*c); }); + AbstractBuilder::deleteAll(); ts.deleteTask(tPublishInit); }