Почему googlemock сообщает об утечке макета, когда я вижу, что он удаляется?

Я пытаюсь добавить модульные тесты и макеты в устаревший проект. В рамках этого я частично издевался над одним из классов, имитируя только те методы, которые мне нужны в классе, который я сейчас тестирую. Затем я передаю этот макет классу для внедрения зависимостей и удаляю его в деструкторе, однако, когда я запускаю тест, он жалуется:

ERROR: this mock object (used in test xxxx) should be deleted but never is. Its address is @0000000004208AD0.
ERROR: 1 leaked mock object found at program exit.

При отладке кода я вижу, что удаление вызывается для фиктивного объекта в деструкторе, но он все еще жалуется. Если я снова вызываю delete в конце теста, я получаю исключение SEH, потому что я пытаюсь удалить память, которая уже была освобождена, но если я закомментирую удаление в деструкторе, тогда это сработает (но это, очевидно, привести к утечке памяти)


person JSoet    schedule 09.10.2015    source источник


Ответы (1)


Проблема в том, что я не объявлял деструктор виртуальным, поэтому в реальном коде он вызывал деструктор базового класса, а не мой фиктивный деструктор.

Это, вероятно, очевидно для некоторых, основываясь на моем последнем заявлении о том, что это работает, когда я удалил макет в тесте, но мне потребовалось некоторое время, чтобы понять это, пока я не нашел эту ссылку, поэтому я решил поделиться ею на SO как хорошо http://wahz.blogspot.ca/2014/08/google-mock-dammit-gets-me-every-time.html

person JSoet    schedule 09.10.2015