summaryrefslogtreecommitdiff
path: root/src/chat-server/post.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2023-05-15 16:09:09 +0200
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2023-05-15 16:09:15 +0200
commit1992ce920eb5268be9487b3bba6d28353d871111 (patch)
tree0674c82a0726135c0a5d136a359f841d503c510f /src/chat-server/post.cpp
parentf395960adeea1f51f01ec8045d1e175926a6ea4a (diff)
downloadmanaserv-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/chat-server/post.cpp')
-rw-r--r--src/chat-server/post.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/chat-server/post.cpp b/src/chat-server/post.cpp
index cfd9506b..78fab0ed 100644
--- a/src/chat-server/post.cpp
+++ b/src/chat-server/post.cpp
@@ -20,21 +20,22 @@
#include "post.h"
-#include "../account-server/character.h"
-#include "../common/configuration.h"
+#include "account-server/character.h"
+#include "common/configuration.h"
-Letter::Letter(unsigned type, CharacterData *sender, CharacterData *receiver)
- : mId(0), mType(type), mExpiry(0), mSender(sender), mReceiver(receiver)
+Letter::Letter(unsigned type,
+ std::unique_ptr<CharacterData> sender,
+ std::unique_ptr<CharacterData> receiver)
+ : mId(0)
+ , mType(type)
+ , mExpiry(0)
+ , mSender(std::move(sender))
+ , mReceiver(std::move(receiver))
{
}
Letter::~Letter()
{
- if (mSender)
- delete mSender;
-
- if (mReceiver)
- delete mReceiver;
}
void Letter::setExpiry(unsigned long expiry)
@@ -72,12 +73,12 @@ bool Letter::addAttachment(InventoryItem item)
CharacterData *Letter::getReceiver() const
{
- return mReceiver;
+ return mReceiver.get();
}
CharacterData *Letter::getSender() const
{
- return mSender;
+ return mSender.get();
}
const std::vector<InventoryItem> &Letter::getAttachments() const
@@ -113,10 +114,6 @@ bool Post::addLetter(Letter *letter)
Letter* Post::getLetter(int letter) const
{
- if (letter < 0 || (size_t) letter > mLetters.size())
- {
- return nullptr;
- }
return mLetters[letter];
}
@@ -137,9 +134,7 @@ void PostManager::addLetter(Letter *letter)
{
auto post = new Post();
post->addLetter(letter);
- mPostBox.insert(
- std::pair<CharacterData*, Post*>(letter->getReceiver(), post)
- );
+ mPostBox.insert(std::make_pair(letter->getReceiver(), post));
}
}