diff options
author | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2023-05-15 16:09:09 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2023-05-15 16:09:15 +0200 |
commit | 1992ce920eb5268be9487b3bba6d28353d871111 (patch) | |
tree | 0674c82a0726135c0a5d136a359f841d503c510f /src/account-server/account.cpp | |
parent | f395960adeea1f51f01ec8045d1e175926a6ea4a (diff) | |
download | manaserv-1992ce920eb5268be9487b3bba6d28353d871111.tar.gz manaserv-1992ce920eb5268be9487b3bba6d28353d871111.tar.bz2 manaserv-1992ce920eb5268be9487b3bba6d28353d871111.tar.xz manaserv-1992ce920eb5268be9487b3bba6d28353d871111.zip |
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.
Diffstat (limited to 'src/account-server/account.cpp')
-rw-r--r-- | src/account-server/account.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
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<CharacterData> 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); |