diff --git a/client/CPreGame.cpp b/client/CPreGame.cpp index 91a787b5d..1ae57cbf2 100644 --- a/client/CPreGame.cpp +++ b/client/CPreGame.cpp @@ -1146,7 +1146,7 @@ void SelectionTab::parseGames(const std::unordered_set &files, bool // Create the map info object CMapInfo mapInfo; mapInfo.mapHeader = make_unique(); - mapInfo.scenarioOpts = new StartInfo; + mapInfo.scenarioOpts = nullptr;//to be created by serialiser lf >> *(mapInfo.mapHeader.get()) >> mapInfo.scenarioOpts; mapInfo.fileURI = file.getName(); mapInfo.countPlayers(); diff --git a/lib/mapping/CMapInfo.cpp b/lib/mapping/CMapInfo.cpp index 0cd319d79..4fec37fe3 100644 --- a/lib/mapping/CMapInfo.cpp +++ b/lib/mapping/CMapInfo.cpp @@ -35,11 +35,13 @@ CMapInfo::CMapInfo() : scenarioOpts(nullptr), playerAmnt(0), humanPlayers(0), #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(campaignHeader); - STEAL(scenarioOpts); STEAL(fileURI); STEAL(date); STEAL(playerAmnt); @@ -48,6 +50,10 @@ CMapInfo::CMapInfo(CMapInfo && tmp) STEAL(isRandomMap); } +CMapInfo::~CMapInfo() +{ + vstd::clear_pointer(scenarioOpts); +} void CMapInfo::mapInit(const std::string & fname) { diff --git a/lib/mapping/CMapInfo.h b/lib/mapping/CMapInfo.h index 2e204e84b..2a71f71ef 100644 --- a/lib/mapping/CMapInfo.h +++ b/lib/mapping/CMapInfo.h @@ -32,6 +32,7 @@ public: CMapInfo(); CMapInfo(CMapInfo && tmp); + virtual ~CMapInfo(); CMapInfo &operator=(CMapInfo &&other);