From 56bc391763be07c39ba3e0d5aec29e07e7fc9c38 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 16 Jun 2025 10:30:22 +0100 Subject: [PATCH] Codechange: Remove manual memory management of AIScannerInfo::info_dummy (#14338) Co-authored-by: Henry Wilson --- src/ai/ai_info.cpp | 2 +- src/ai/ai_scanner.cpp | 20 ++++++-------------- src/ai/ai_scanner.hpp | 4 ++-- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 3cc023c995..8e3de91a1f 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -108,7 +108,7 @@ template <> SQInteger PushClassName(HSQUIRRELVM vm) { sq /* Remove the link to the real instance, else it might get deleted by RegisterAI() */ sq_setinstanceup(vm, 2, nullptr); /* Register the AI to the base system */ - static_cast(info->GetScanner())->SetDummyAI(info); + static_cast(info->GetScanner())->SetDummyAI(std::unique_ptr(info)); return 0; } diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index 281b8925d3..827dc4cc3c 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -22,11 +22,8 @@ #include "../safeguards.h" -AIScannerInfo::AIScannerInfo() : - ScriptScanner(), - info_dummy(nullptr) -{ -} +AIScannerInfo::AIScannerInfo() = default; +AIScannerInfo::~AIScannerInfo() = default; void AIScannerInfo::Initialize() { @@ -39,14 +36,9 @@ void AIScannerInfo::Initialize() Script_CreateDummyInfo(this->engine->GetVM(), "AI", "ai"); } -void AIScannerInfo::SetDummyAI(class AIInfo *info) +void AIScannerInfo::SetDummyAI(std::unique_ptr &&info) { - this->info_dummy = info; -} - -AIScannerInfo::~AIScannerInfo() -{ - delete this->info_dummy; + this->info_dummy = std::move(info); } std::string AIScannerInfo::GetScriptName(ScriptInfo &info) @@ -63,7 +55,7 @@ AIInfo *AIScannerInfo::SelectRandomAI() const { if (_game_mode == GM_MENU) { Debug(script, 0, "The intro game should not use AI, loading 'dummy' AI."); - return this->info_dummy; + return this->info_dummy.get(); } /* Filter for AIs suitable as Random AI. */ @@ -72,7 +64,7 @@ AIInfo *AIScannerInfo::SelectRandomAI() const uint num_random_ais = std::ranges::distance(random_ais); if (num_random_ais == 0) { Debug(script, 0, "No suitable AI found, loading 'dummy' AI."); - return this->info_dummy; + return this->info_dummy.get(); } /* Pick a random AI */ diff --git a/src/ai/ai_scanner.hpp b/src/ai/ai_scanner.hpp index 9420a011ff..364e5642a9 100644 --- a/src/ai/ai_scanner.hpp +++ b/src/ai/ai_scanner.hpp @@ -37,7 +37,7 @@ public: /** * Set the Dummy AI. */ - void SetDummyAI(class AIInfo *info); + void SetDummyAI(std::unique_ptr &&info); protected: std::string GetScriptName(ScriptInfo &info) override; @@ -47,7 +47,7 @@ protected: void RegisterAPI(class Squirrel &engine) override; private: - AIInfo *info_dummy; ///< The dummy AI. + std::unique_ptr info_dummy; ///< The dummy AI. }; class AIScannerLibrary : public ScriptScanner {