Dlaczego GoogleMock przecieka mój shared_ptr?

Do testowania używam GoogleMock / GoogleTest i widzę dziwne zachowanie, gdy matcher ma parametr shared_ptr do makiety jako parametr, a EXPECT jest wywoływany na tym samym shared_ptr. Obraźliwy fragment kodu:

<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>

Gdy ten test zostanie uruchomiony, otrzymam

<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>

Jakiś pomysł, dlaczego tak się dzieje? Raczej nie muszę z tego korzystaćMock::AllowLeak.

questionAnswers(1)

yourAnswerToTheQuestion