gpt4 book ai didi

c++ - 如何使用(智能)指针指向模拟对象(在谷歌模拟中)

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:08 24 4
gpt4 key购买 nike

当我使用 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 为我指明了正确的方向。

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

关于c++ - 如何使用(智能)指针指向模拟对象(在谷歌模拟中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56784879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com