Я пытаюсь изменить среду выполнения, чтобы не использовать общие указатели и не использовать блокировки.Я заменил их всех, чтобы использовать вместо них новый оператор, пока все хорошо, среда выполнения по-прежнему работает правильно, но ... происходит очень большое количество утечек памяти (не удивительно).Каков жизненный цикл таких объектов, как ATNConfig?Где будет безопасное место для их удаления?Обратите внимание, я также заставил сгенерированный синтаксический анализатор использовать нестатический ATN, поэтому мне не нужны блокировки в многопоточном контексте.
Вот пример полученной утечки:
==4747== 54,736,648 (53,672,160 direct, 1,064,488 indirect) bytes in 1,118,170 blocks are definitely lost in loss record 1,519 of 1,519
==4747== at 0x4C2E0EF: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4747== by 0xAE24F0: antlr4::atn::ParserATNSimulator::getEpsilonTarget(antlr4::atn::ATNConfig*, antlr4::atn::Transition*, bool, bool, bool, bool) (ParserATNSimulator.cpp:1050)
==4747== by 0xAE1D01: antlr4::atn::ParserATNSimulator::closure_(antlr4::atn::ATNConfig*, antlr4::atn::ATNConfigSet*, std::unordered_set<antlr4::atn::ATNConfig*, antlr4::atn::ATNConfig::Hasher, antlr4::atn::ATNConfig::Comparer, std::allocator<antlr4::atn::ATNConfig*> >&, bool, bool, int, bool) (ParserATNSimulator.cpp:894)