如何使用(智能)指针指向模拟对象(在 google 模拟中)

How to use a (smart) pointer to mocked object (in google mock)

当我使用 shared_ptr 将我的模拟对象存储在堆上时,满足了预期并且指针被销毁但 GMock 框架认为模拟对象仍然存在:

// Using a mock object
MockFoo foo;
EXPECT_CALL(foo, doSomething());
foo.doSomething();
// Test passes without warnings
// Using shared_ptr to a mock object
auto foo_sp = std::make_shared<MockFoo>();
EXPECT_CALL(*foo_sp, doSomething());
A a(std::move(foo_sp));
a.useFoo();
// a is then deleted
...
// in useFoo:
foo_sp->doSomething();
...
// Test passes WITH warnings that mock object is still alive

这是 Google 模拟框架中的错误吗?如果不是,那么我如何将我的模拟对象存储在堆中的智能指针中并正确使用它?

感谢@YSC、@sklott 和@Yksisarvinen 为我指明了正确的方向。

对于遇到类似问题的任何人。事实证明,在我的案例中,问题与 Google C++ 模拟框架无关。我将模拟对象传递给派生的 class,其基础 class 的析构函数未声明为虚拟对象。因此,模拟所有者的析构函数从未被调用,模拟对象保持活动状态。