From 61fac447cf5666e7a542e6de8d3e1e99be72703a Mon Sep 17 00:00:00 2001 From: Vladimir Olteanu Date: Mon, 16 Aug 2021 13:50:36 +0300 Subject: [PATCH] Fix mem leak in game_controller.cpp --- Source/controls/devices/game_controller.cpp | 18 +++++++++--------- Source/controls/devices/game_controller.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/controls/devices/game_controller.cpp b/Source/controls/devices/game_controller.cpp index 1faf94ba2..d7c5ad194 100644 --- a/Source/controls/devices/game_controller.cpp +++ b/Source/controls/devices/game_controller.cpp @@ -15,7 +15,7 @@ namespace devilution { // Defined in SourceX/controls/plctrls.cpp extern bool sgbControllerActive; -std::vector *const GameController::controllers_ = new std::vector; +std::vector GameController::controllers_; ControllerButton GameController::ToControllerButton(const SDL_Event &event) { @@ -165,7 +165,7 @@ void GameController::Add(int joystickIndex) } SDL_Joystick *const sdlJoystick = SDL_GameControllerGetJoystick(result.sdl_game_controller_); result.instance_id_ = SDL_JoystickInstanceID(sdlJoystick); - controllers_->push_back(result); + controllers_.push_back(result); const SDL_JoystickGUID guid = SDL_JoystickGetGUID(sdlJoystick); SDLUniquePtr mapping { SDL_GameControllerMappingForGUID(guid) }; @@ -177,12 +177,12 @@ void GameController::Add(int joystickIndex) void GameController::Remove(SDL_JoystickID instanceId) { Log("Removing game controller with instance id {}", instanceId); - for (std::size_t i = 0; i < controllers_->size(); ++i) { - const GameController &controller = (*controllers_)[i]; + for (std::size_t i = 0; i < controllers_.size(); ++i) { + const GameController &controller = controllers_[i]; if (controller.instance_id_ != instanceId) continue; - controllers_->erase(controllers_->begin() + i); - sgbControllerActive = !controllers_->empty(); + controllers_.erase(controllers_.begin() + i); + sgbControllerActive = !controllers_.empty(); return; } Log("Game controller not found with instance id: {}", instanceId); @@ -190,7 +190,7 @@ void GameController::Remove(SDL_JoystickID instanceId) GameController *GameController::Get(SDL_JoystickID instanceId) { - for (auto &controller : *controllers_) { + for (auto &controller : controllers_) { if (controller.instance_id_ == instanceId) return &controller; } @@ -212,12 +212,12 @@ GameController *GameController::Get(const SDL_Event &event) const std::vector &GameController::All() { - return *controllers_; + return controllers_; } bool GameController::IsPressedOnAnyController(ControllerButton button) { - for (auto &controller : *controllers_) + for (auto &controller : controllers_) if (controller.IsPressed(button)) return true; return false; diff --git a/Source/controls/devices/game_controller.h b/Source/controls/devices/game_controller.h index 7ccb48048..5bc7bcf41 100644 --- a/Source/controls/devices/game_controller.h +++ b/Source/controls/devices/game_controller.h @@ -11,7 +11,7 @@ namespace devilution { class GameController { - static std::vector *const controllers_; + static std::vector controllers_; public: static void Add(int joystickIndex);