Только что обнаружил, решил похвалиться — MSVC 2017 Community 15.9.21 и ниже создаёт бешенный мемори лик в релизе/х64 с таким кодом. В дебаге код корректный. В 2015й этот же код работал.
#include <iostream>
#include <vector>
class Battle
{
public:
Battle()
{
arr.reserve(100000);
}
std::vector<char> arr;
};
struct BattleArchiveAnswerMsg
{
int party_id = -1;
Battle battle;
};
volatile bool something = false;
BattleArchiveAnswerMsg get_battles(int player_id)
{
if(something)
{
return {};
}
BattleArchiveAnswerMsg bansw;
bansw.party_id = 1;
if(something)
{
bansw.battle = Battle();
return bansw;
}
return {};
}
int main()
{
std::cout << "Hello World!\n";
while(true)
get_battles(32);
}
Деструктор ~Battle объекта в bansw не вызывается в конце функции и память течёт.
Подал им багрепорт.