diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index d9bf811f9d..286c78f0e9 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -138,9 +138,9 @@ public: static bool HasAI(const struct ContentInfo *ci, bool md5sum); static bool HasAILibrary(const ContentInfo *ci, bool md5sum); private: - static uint frame_counter; ///< Tick counter for the AI code - static class AIScannerInfo *scanner_info; ///< ScriptScanner instance that is used to find AIs - static class AIScannerLibrary *scanner_library; ///< ScriptScanner instance that is used to find AI Libraries + static uint frame_counter; ///< Tick counter for the AI code + static std::unique_ptr scanner_info; ///< ScriptScanner instance that is used to find AIs + static std::unique_ptr scanner_library; ///< ScriptScanner instance that is used to find AI Libraries }; #endif /* AI_HPP */ diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 122c4fb83c..eebb906128 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -24,8 +24,8 @@ #include "../safeguards.h" /* static */ uint AI::frame_counter = 0; -/* static */ AIScannerInfo *AI::scanner_info = nullptr; -/* static */ AIScannerLibrary *AI::scanner_library = nullptr; +/* static */ std::unique_ptr AI::scanner_info = nullptr; +/* static */ std::unique_ptr AI::scanner_library = nullptr; /* static */ bool AI::CanStartNew() { @@ -169,9 +169,9 @@ AI::frame_counter = 0; if (AI::scanner_info == nullptr) { TarScanner::DoScan(TarScanner::Mode::AI); - AI::scanner_info = new AIScannerInfo(); + AI::scanner_info = std::make_unique(); AI::scanner_info->Initialize(); - AI::scanner_library = new AIScannerLibrary(); + AI::scanner_library = std::make_unique(); AI::scanner_library->Initialize(); } } @@ -185,10 +185,8 @@ * still load all the AIS, while keeping the configs in place */ Rescan(); } else { - delete AI::scanner_info; - delete AI::scanner_library; - AI::scanner_info = nullptr; - AI::scanner_library = nullptr; + AI::scanner_info.reset(); + AI::scanner_library.reset(); for (CompanyID c = CompanyID::Begin(); c < MAX_COMPANIES; ++c) { if (_settings_game.ai_config[c] != nullptr) { @@ -354,11 +352,11 @@ /* static */ AIScannerInfo *AI::GetScannerInfo() { - return AI::scanner_info; + return AI::scanner_info.get(); } /* static */ AIScannerLibrary *AI::GetScannerLibrary() { - return AI::scanner_library; + return AI::scanner_library.get(); } diff --git a/src/game/game.hpp b/src/game/game.hpp index c3664cd696..c560d7263c 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -67,7 +67,7 @@ public: /** * Get the current GameScript instance. */ - static class GameInstance *GetGameInstance() { return Game::instance; } + static class GameInstance *GetGameInstance() { return Game::instance.get(); } /** * Get the current GameInfo. @@ -98,7 +98,7 @@ public: /** * Get the current active instance. */ - static class GameInstance *GetInstance() { return Game::instance; } + static class GameInstance *GetInstance() { return Game::instance.get(); } /** Wrapper function for GameScanner::HasGame */ static bool HasGame(const struct ContentInfo *ci, bool md5sum); @@ -109,11 +109,11 @@ public: static GameScannerLibrary *GetScannerLibrary(); private: - static uint frame_counter; ///< Tick counter for the Game code. - static class GameInstance *instance; ///< Instance to the current active Game. - static class GameScannerInfo *scanner_info; ///< Scanner for Game scripts. - static class GameScannerLibrary *scanner_library; ///< Scanner for GS Libraries. - static class GameInfo *info; ///< Current selected GameInfo. + static uint frame_counter; ///< Tick counter for the Game code. + static std::unique_ptr instance; ///< Instance to the current active Game. + static std::unique_ptr scanner_info; ///< Scanner for Game scripts. + static std::unique_ptr scanner_library; ///< Scanner for GS Libraries. + static GameInfo *info; ///< Current selected GameInfo. }; #endif /* GAME_HPP */ diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index 93d6c7781b..fa69af0ae6 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -24,9 +24,9 @@ /* static */ uint Game::frame_counter = 0; /* static */ GameInfo *Game::info = nullptr; -/* static */ GameInstance *Game::instance = nullptr; -/* static */ GameScannerInfo *Game::scanner_info = nullptr; -/* static */ GameScannerLibrary *Game::scanner_library = nullptr; +/* static */ std::unique_ptr Game::instance = nullptr; +/* static */ std::unique_ptr Game::scanner_info = nullptr; +/* static */ std::unique_ptr Game::scanner_library = nullptr; /* static */ void Game::GameLoop() { @@ -62,9 +62,9 @@ if (Game::scanner_info == nullptr) { TarScanner::DoScan(TarScanner::Mode::Game); - Game::scanner_info = new GameScannerInfo(); + Game::scanner_info = std::make_unique(); Game::scanner_info->Initialize(); - Game::scanner_library = new GameScannerLibrary(); + Game::scanner_library = std::make_unique(); Game::scanner_library->Initialize(); } } @@ -89,7 +89,7 @@ cur_company.Change(OWNER_DEITY); Game::info = info; - Game::instance = new GameInstance(); + Game::instance = std::make_unique(); Game::instance->Initialize(info); Game::instance->LoadOnStack(config->GetToLoadData()); config->SetToLoadData(nullptr); @@ -103,8 +103,7 @@ { Backup cur_company(_current_company); - delete Game::instance; - Game::instance = nullptr; + Game::instance.reset(); Game::info = nullptr; cur_company.Restore(); @@ -112,10 +111,8 @@ if (keepConfig) { Rescan(); } else { - delete Game::scanner_info; - delete Game::scanner_library; - Game::scanner_info = nullptr; - Game::scanner_library = nullptr; + Game::scanner_info.reset(); + Game::scanner_library.reset(); if (_settings_game.game_config != nullptr) { delete _settings_game.game_config; @@ -172,8 +169,7 @@ Debug(script, 0, "After a reload, the GameScript by the name '{}' was no longer found, and removed from the list.", _settings_game.game_config->GetName()); _settings_game.game_config->Change(std::nullopt); if (Game::instance != nullptr) { - delete Game::instance; - Game::instance = nullptr; + Game::instance.reset(); Game::info = nullptr; } } else if (Game::instance != nullptr) { @@ -262,9 +258,9 @@ /* static */ GameScannerInfo *Game::GetScannerInfo() { - return Game::scanner_info; + return Game::scanner_info.get(); } /* static */ GameScannerLibrary *Game::GetScannerLibrary() { - return Game::scanner_library; + return Game::scanner_library.get(); }