From 1992ce920eb5268be9487b3bba6d28353d871111 Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Mon, 15 May 2023 16:09:09 +0200 Subject: Manage CharacterData using std::unique_ptr Fixes many memory leaks, but also made it clear that we're very often loading all the character data only to immediately throw it away again, even when most of the time all we really need is the database ID or the name. --- src/account-server/account.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'src/account-server/account.cpp') diff --git a/src/account-server/account.cpp b/src/account-server/account.cpp index 11773c47..5e90d091 100644 --- a/src/account-server/account.cpp +++ b/src/account-server/account.cpp @@ -24,10 +24,6 @@ Account::~Account() { - for (auto &character : mCharacters) - { - delete character.second; - } } bool Account::isSlotEmpty(unsigned slot) const @@ -35,17 +31,17 @@ bool Account::isSlotEmpty(unsigned slot) const return mCharacters.find(slot) == mCharacters.end(); } -void Account::setCharacters(const Characters &characters) +void Account::setCharacters(Characters characters) { - mCharacters = characters; + mCharacters = std::move(characters); } -void Account::addCharacter(CharacterData *character) +void Account::addCharacter(std::unique_ptr character) { - auto slot = (unsigned) character->getCharacterSlot(); + auto slot = character->getCharacterSlot(); assert(isSlotEmpty(slot)); - mCharacters[slot] = character; + mCharacters[slot] = std::move(character); } void Account::delCharacter(unsigned slot) @@ -55,13 +51,17 @@ void Account::delCharacter(unsigned slot) { if ((*iter).second->getCharacterSlot() == slot) { - delete (*iter).second; - (*iter).second = 0; mCharacters.erase(iter); } } } +const CharacterData *Account::getCharacter(unsigned slot) const +{ + auto it = mCharacters.find(slot); + return it != mCharacters.end() ? it->second.get() : nullptr; +} + void Account::setID(int id) { assert(mID < 0); -- cgit v1.2.3-60-g2f50