From a8c59c41bc103f0336d9982369be5dd85ac68111 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 28 Feb 2022 18:51:47 +0100 Subject: Fix majors memory leaks (TODO: shared_ptr for Game objects and implement ~Game()) --- src/base_tab/AppendGameDialog.cpp | 3 +++ src/base_tab/AppendGameDialog.hpp | 3 ++- src/base_tab/BaseTab.cpp | 4 ++++ src/base_tab/BaseTab.hpp | 1 + src/base_tab/gamebase/PGNGameBase.cpp | 4 ++++ src/base_tab/gamebase/PGNGameBase.hpp | 1 + 6 files changed, 15 insertions(+), 1 deletion(-) (limited to 'src/base_tab') diff --git a/src/base_tab/AppendGameDialog.cpp b/src/base_tab/AppendGameDialog.cpp index d8fe996..a4ac126 100644 --- a/src/base_tab/AppendGameDialog.cpp +++ b/src/base_tab/AppendGameDialog.cpp @@ -17,8 +17,11 @@ AppendGameDialog::AppendGameDialog(wxWindow *parent, GameBase *base) ID_DIALOG_CANCEL_BUTTON); Bind(wxEVT_BUTTON, &AppendGameDialog::OnImport, this, ID_DIALOG_IMPORT_BUTTON); + Bind(wxEVT_CLOSE_WINDOW, &AppendGameDialog::OnClose, this); } +void AppendGameDialog::OnClose(wxCloseEvent &e) { Destroy(); } + void AppendGameDialog::OnCancel(wxCommandEvent &event) { this->Close(); } void AppendGameDialog::OnImport(wxCommandEvent &event) { diff --git a/src/base_tab/AppendGameDialog.hpp b/src/base_tab/AppendGameDialog.hpp index fba8078..648c798 100644 --- a/src/base_tab/AppendGameDialog.hpp +++ b/src/base_tab/AppendGameDialog.hpp @@ -1,11 +1,12 @@ #include "gamebase/GameBase.hpp" class AppendGameDialog : public DialogAppendGame { - GameBase *base; + GameBase *base; // Should not be destroy std::vector tinfos; public: AppendGameDialog(wxWindow *parent, GameBase *base); void OnCancel(wxCommandEvent &event); void OnImport(wxCommandEvent &event); + void OnClose(wxCloseEvent &e); }; \ No newline at end of file diff --git a/src/base_tab/BaseTab.cpp b/src/base_tab/BaseTab.cpp index 465f91f..410cc92 100644 --- a/src/base_tab/BaseTab.cpp +++ b/src/base_tab/BaseTab.cpp @@ -24,6 +24,10 @@ BaseTab::BaseTab(wxFrame *parent, std::string base_file) LoadFile(); } +BaseTab::~BaseTab() { + delete base; +} + void BaseTab::OnImport(wxCommandEvent &event) { AppendGameDialog *dia = new AppendGameDialog(this, base); dia->ShowModal(); diff --git a/src/base_tab/BaseTab.hpp b/src/base_tab/BaseTab.hpp index 5eef3b1..2f05c67 100644 --- a/src/base_tab/BaseTab.hpp +++ b/src/base_tab/BaseTab.hpp @@ -15,6 +15,7 @@ class BaseTab : public TabBase, public TabInfos { public: BaseTab(wxFrame *parent, std::string base_file); + ~BaseTab(); void ApplyPreferences(); void LoadFile(); void OnDelete(wxCommandEvent &event); diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp index 7a1a6a4..edcd98f 100644 --- a/src/base_tab/gamebase/PGNGameBase.cpp +++ b/src/base_tab/gamebase/PGNGameBase.cpp @@ -6,6 +6,10 @@ PGNGameBase::PGNGameBase(std::string pgn_file) : pgn(new pgnp::PGN()) { pgn->FromFile(pgn_file); } +PGNGameBase::~PGNGameBase() { + delete pgn; // Should never fail since pgn is never NULL +} + bool PGNGameBase::NextGame() { bool game_found = false; try { diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp index 982f57c..4f39e1a 100644 --- a/src/base_tab/gamebase/PGNGameBase.hpp +++ b/src/base_tab/gamebase/PGNGameBase.hpp @@ -8,6 +8,7 @@ class PGNGameBase : public GameBase { public: PGNGameBase(std::string pgn_file); + ~PGNGameBase(); Game *GetGame(std::uint32_t id); bool NextGame(); Game *GetCurrentGame(); -- cgit v1.2.3