1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-19 21:10:12 +02:00

do not leak scenarioOpts in CMapInfo

This commit is contained in:
AlexVinS 2016-08-31 06:18:01 +03:00
parent cf1d5d0bc9
commit 437eadf1ed
3 changed files with 10 additions and 3 deletions

View File

@ -1146,7 +1146,7 @@ void SelectionTab::parseGames(const std::unordered_set<ResourceID> &files, bool
// Create the map info object // Create the map info object
CMapInfo mapInfo; CMapInfo mapInfo;
mapInfo.mapHeader = make_unique<CMapHeader>(); mapInfo.mapHeader = make_unique<CMapHeader>();
mapInfo.scenarioOpts = new StartInfo; mapInfo.scenarioOpts = nullptr;//to be created by serialiser
lf >> *(mapInfo.mapHeader.get()) >> mapInfo.scenarioOpts; lf >> *(mapInfo.mapHeader.get()) >> mapInfo.scenarioOpts;
mapInfo.fileURI = file.getName(); mapInfo.fileURI = file.getName();
mapInfo.countPlayers(); mapInfo.countPlayers();

View File

@ -35,11 +35,13 @@ CMapInfo::CMapInfo() : scenarioOpts(nullptr), playerAmnt(0), humanPlayers(0),
#define STEAL(x) x = std::move(tmp.x) #define STEAL(x) x = std::move(tmp.x)
CMapInfo::CMapInfo(CMapInfo && tmp) CMapInfo::CMapInfo(CMapInfo && tmp):
scenarioOpts(nullptr), playerAmnt(0), humanPlayers(0),
actualHumanPlayers(0), isRandomMap(false)
{ {
std::swap(scenarioOpts, tmp.scenarioOpts);
STEAL(mapHeader); STEAL(mapHeader);
STEAL(campaignHeader); STEAL(campaignHeader);
STEAL(scenarioOpts);
STEAL(fileURI); STEAL(fileURI);
STEAL(date); STEAL(date);
STEAL(playerAmnt); STEAL(playerAmnt);
@ -48,6 +50,10 @@ CMapInfo::CMapInfo(CMapInfo && tmp)
STEAL(isRandomMap); STEAL(isRandomMap);
} }
CMapInfo::~CMapInfo()
{
vstd::clear_pointer(scenarioOpts);
}
void CMapInfo::mapInit(const std::string & fname) void CMapInfo::mapInit(const std::string & fname)
{ {

View File

@ -32,6 +32,7 @@ public:
CMapInfo(); CMapInfo();
CMapInfo(CMapInfo && tmp); CMapInfo(CMapInfo && tmp);
virtual ~CMapInfo();
CMapInfo &operator=(CMapInfo &&other); CMapInfo &operator=(CMapInfo &&other);