From b1a3b78f40bbab637db9a650af498223bb9e42e3 Mon Sep 17 00:00:00 2001 From: dankmeme01 <42031238+dankmeme01@users.noreply.github.com> Date: Thu, 9 Jan 2025 21:08:48 +0100 Subject: [PATCH] and so, i leaked this singleton --- src/managers/settings.hpp | 4 ++-- src/util/singleton.hpp | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/managers/settings.hpp b/src/managers/settings.hpp index 03d052502..598f113f6 100644 --- a/src/managers/settings.hpp +++ b/src/managers/settings.hpp @@ -8,8 +8,8 @@ #include -class GlobedSettings : public SingletonBase { - friend class SingletonBase; +class GlobedSettings : public SingletonLeakBase { + friend class SingletonLeakBase; GlobedSettings(); public: diff --git a/src/util/singleton.hpp b/src/util/singleton.hpp index fb2293d76..c98dbd377 100644 --- a/src/util/singleton.hpp +++ b/src/util/singleton.hpp @@ -35,3 +35,24 @@ class SingletonBase { destructed = true; } }; + +// This is like SingletonBase except not freed during program exit +template +class SingletonLeakBase { +public: + // no copy + SingletonLeakBase(const SingletonLeakBase&) = delete; + SingletonLeakBase& operator=(const SingletonLeakBase&) = delete; + // no move + SingletonLeakBase(SingletonLeakBase&&) = delete; + SingletonLeakBase& operator=(SingletonLeakBase&&) = delete; + + static Derived& get() { + static Derived* instance = new Derived(); + return *instance; + } + + +protected: + SingletonLeakBase() {} +};