Por que o GoogleMock está vazando meu shared_ptr?
Eu uso o GoogleMock / GoogleTest para testes, e estou vendo um comportamento estranho quando um matcher tem um shared_ptr para um mock como parâmetro, e EXPECT é chamado no mesmo shared_ptr. O código ofensivo:
<code>#include <gmock/gmock.h> #include <gtest/gtest.h> #include <boost/shared_ptr.hpp> #include <boost/make_shared.hpp> using namespace boost; using namespace testing; struct MyParameter { virtual ~MyParameter() {} virtual void myMethod() = 0; }; struct MyParameterMock : public MyParameter { MOCK_METHOD0(myMethod, void()); }; struct MyClass { virtual ~MyClass() {} virtual void myMethod(shared_ptr<MyParameter> p) {} }; struct MyClassMock : public MyClass { MOCK_METHOD1(myMethod, void(shared_ptr<MyParameter>)); }; TEST(LeakTest, GoogleMockLeaksMatchedPointer) { shared_ptr<MyClassMock> c = make_shared<MyClassMock>(); shared_ptr<MyParameterMock> p = make_shared<MyParameterMock>(); { InSequence dummy; EXPECT_CALL(*c, myMethod(Eq(p))); EXPECT_CALL(*p, myMethod()); } c->myMethod(p); p->myMethod(); } </code>
Quando este teste é executado, recebo
<code>leak_ptr_mock.cpp:37: ERROR: this mock object (used in test LeakTest.GoogleMockLeaksMatchedPointer) should be deleted but never is. Its address is @0x9309544. ERROR: 1 leaked mock object found at program exit. </code>
Alguma idéia de por que isso acontece? Eu prefiro não usarMock::AllowLeak
.