Итак, у меня есть фрагмент кода для большого тестового кода, не написанный мной, но мне нужно отладить утечку в:
TEST_F(LeakChecked, PurgeNotify)
{
AsyncManager asyncManager;
DataIndexer indexer(*logger_, asyncManager);
//....
EXPECT_CALL(
asyncManager,
RunAsync(
AllOf(
EventType("DataPurged"),
EventTime(0),
EventJson(
R"({"bucket":"dropped_files","data":{"path":"c:\\foo\\test.exe"},"time":0,"type":"DataPurged"})"),
EventCoverage()),
_,
0,
0));
//...
Mock::VerifyAndClearExpectations(&asyncManager);
}
В приборе используются Windows '_CrtMemCheckpoint и другие функции обнаружить утечки памяти в своем деструкторе. У меня было около 6 утечек, и после добавления _CrtSetBreakAllo c, чтобы разбить их, оказалось, что все они указывают на вышеупомянутый макрос EXPECT_CALL.
RunAsyn c - это метод, первым аргументом которого является std :: shared_ptr, но ни одна из утечек не указывает на утечку указанного объекта, вместо этого распределение происходит в gmock-matchers.h, где он выделяет Matcher<T>
с новым.
В других темах, которые я читал что вызов VerifyAndClearExpectations должен работать, но в моем случае утечка сохраняется.
Могу ли я что-то исправить, или я просто должен устранить утечки?