#pragma once #include #include namespace cru::ui { class DeleteLaterImpl { public: virtual ~DeleteLaterImpl(); void DeleteLater(); protected: virtual void OnPrepareDelete(); }; template struct DeleteLaterDeleter { void operator()(T* p) const { p->DeleteLater(); } }; template using DeleteLaterPtr = std::unique_ptr>; template DeleteLaterPtr MakeDeleteLaterPtr(Args&&... args) { return DeleteLaterPtr(new T(std::forward(args)...)); } } // namespace cru::ui