From eb0ad66d88d96be3ccad31e22ef9d3126ec79ef2 Mon Sep 17 00:00:00 2001 From: ocornut Date: Mon, 18 Nov 2024 18:46:27 +0100 Subject: [PATCH] Demo: example tree used by Property Editor & Selection demos properly freed on app closure. (#8158) --- docs/CHANGELOG.txt | 2 ++ imgui_demo.cpp | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index ef42ebc4d..29d1cf98a 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -53,6 +53,8 @@ Other changes: - Error Handling: fixed cases where recoverable error handling would crash when processing errors outside of the NewFrame()..EndFrame() scope. (#1651) +- Demo: example tree used by Property Editor & Selection demos properly freed + on application closure. (#8158) [@Legulysse] - Examples: Win32+DX12: Using a basic free-list allocator to manage multiple SRV descriptors. diff --git a/imgui_demo.cpp b/imgui_demo.cpp index ac34e6b1d..c822c162e 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -308,6 +308,13 @@ static ExampleTreeNode* ExampleTree_CreateNode(const char* name, int uid, Exampl return node; } +static void ExampleTree_DestroyNode(ExampleTreeNode* node) +{ + for (ExampleTreeNode* child_node : node->Childs) + ExampleTree_DestroyNode(child_node); + IM_DELETE(node); +} + // Create example tree data // (this allocates _many_ more times than most other code in either Dear ImGui or others demo) static ExampleTreeNode* ExampleTree_CreateDemoTree() @@ -343,7 +350,7 @@ static ExampleTreeNode* ExampleTree_CreateDemoTree() // [SECTION] Demo Window / ShowDemoWindow() //----------------------------------------------------------------------------- -// Data to be shared accross different functions of the demo. +// Data to be shared across different functions of the demo. struct ImGuiDemoWindowData { // Examples Apps (accessible from the "Examples" menu) @@ -371,6 +378,8 @@ struct ImGuiDemoWindowData // Other data ExampleTreeNode* DemoTree = NULL; + + ~ImGuiDemoWindowData() { if (DemoTree) ExampleTree_DestroyNode(DemoTree); } }; // Demonstrate most Dear ImGui features (this is big function!)