From 04d243699cbde40fe69472f4c4df38c36f7942ef Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 18 Nov 2025 17:31:23 +0800 Subject: Move delete later to platform::gui. --- src/platform/gui/UiApplication.cpp | 18 ++++++++++++++++-- src/platform/gui/win/UiApplication.cpp | 6 ++++++ 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'src/platform') diff --git a/src/platform/gui/UiApplication.cpp b/src/platform/gui/UiApplication.cpp index f035224f..56570125 100644 --- a/src/platform/gui/UiApplication.cpp +++ b/src/platform/gui/UiApplication.cpp @@ -1,9 +1,23 @@ #include "cru/platform/gui/UiApplication.h" - #include "cru/base/Base.h" +#include + namespace cru::platform::gui { +void DeleteLaterPool::Add(Object* object) { pool_.push_back(object); } + +void DeleteLaterPool::Clean() { + std::unordered_set deleted; + for (auto object : pool_) { + if (!deleted.contains(object)) { + deleted.insert(object); + delete object; + } + } + pool_.clear(); +} + namespace { IUiApplication* instance = nullptr; } @@ -12,7 +26,7 @@ IUiApplication* IUiApplication::GetInstance() { return instance; } IUiApplication::IUiApplication() { if (instance) { - throw std::runtime_error("An ui application has already been created."); + throw Exception("A ui application has already been created."); } instance = this; diff --git a/src/platform/gui/win/UiApplication.cpp b/src/platform/gui/win/UiApplication.cpp index eb85ef90..e1c21d59 100644 --- a/src/platform/gui/win/UiApplication.cpp +++ b/src/platform/gui/win/UiApplication.cpp @@ -71,6 +71,8 @@ int WinUiApplication::Run() { break; } } + + delete_later_pool_.Clean(); } for (const auto& handler : quit_handlers_) handler(); @@ -103,6 +105,10 @@ long long WinUiApplication::SetInterval(std::chrono::milliseconds milliseconds, void WinUiApplication::CancelTimer(long long id) { timers_.Remove(id); } +void WinUiApplication::DeleteLater(Object* object) { + delete_later_pool_.Add(object); +} + std::vector WinUiApplication::GetAllWindow() { std::vector result; for (const auto w : windows_) { -- cgit v1.2.3