From faf73c4af74bdae1abf394a33b573149b98ec2b1 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 16 Nov 2025 12:14:47 +0800 Subject: Clean DeleteLater. --- include/cru/ui/DeleteLater.h | 61 ++++++++++++++------------------------------ 1 file changed, 19 insertions(+), 42 deletions(-) (limited to 'include/cru/ui/DeleteLater.h') diff --git a/include/cru/ui/DeleteLater.h b/include/cru/ui/DeleteLater.h index 0f04c73a..d04d1814 100644 --- a/include/cru/ui/DeleteLater.h +++ b/include/cru/ui/DeleteLater.h @@ -1,65 +1,42 @@ #pragma once #include "Base.h" +#include #include #include namespace cru::ui { class CRU_UI_API DeleteLaterImpl { public: + DeleteLaterImpl(); virtual ~DeleteLaterImpl(); void DeleteLater(); protected: virtual void OnPrepareDelete(); + + private: + bool delete_later_scheduled_; }; +namespace details { template -class DeleteLaterPtr { - public: - DeleteLaterPtr() = default; - - DeleteLaterPtr(const DeleteLaterPtr& other) = delete; - DeleteLaterPtr& operator=(const DeleteLaterPtr& other) = delete; - - DeleteLaterPtr(DeleteLaterPtr&& other) noexcept : ptr_(other.ptr_) { - other.ptr_ = nullptr; - } - - DeleteLaterPtr& operator=(DeleteLaterPtr&& other) noexcept { - if (this != &other) { - if (ptr_ != nullptr) { - ptr_->DeleteLater(); - } - - ptr_ = other.ptr_; - other.ptr_ = nullptr; - } - return *this; - } - - ~DeleteLaterPtr() { - if (ptr_ != nullptr) { - ptr_->DeleteLater(); - } - } - - explicit DeleteLaterPtr(T* ptr) : ptr_(ptr) {} - DeleteLaterPtr(std::unique_ptr&& ptr) : ptr_(ptr.release()) {} - - T& operator*() const { return *ptr_; } - T* operator->() const { return ptr_; } - - explicit operator bool() const { return ptr_ != nullptr; } +struct DeleteLaterPtrDeleter { + void operator()(T* p) const noexcept { p->DeleteLater(); } +}; +} // namespace details - T* get() const { return ptr_; } +template +using DeleteLaterPtr = std::unique_ptr>; - private: - T* ptr_ = nullptr; -}; +template +DeleteLaterPtr ToDeleteLaterPtr(std::unique_ptr&& p) { + return DeleteLaterPtr(p.release()); +} template -DeleteLaterPtr MakeDeleteLaterPtr(Args&&... args) { - return DeleteLaterPtr(new T(std::forward(args)...)); +DeleteLaterPtr MakeDeleteLater(Args&&... args) { + return DeleteLaterPtr(std::forward(args)...); } + } // namespace cru::ui -- cgit v1.2.3