GMock泄漏内存[重复]
Posted
技术标签:
【中文标题】GMock泄漏内存[重复]【英文标题】:GMock leaking memory [duplicate] 【发布时间】:2017-10-01 02:27:07 【问题描述】:代码
class A
public:
void doit() ...
class B
public:
explicit B(unique_ptr<A> a): a_(move(a))
void run()
a_->doit();
private:
unique_ptr<A> a_;
测试代码
class MockA : public A
public:
MOCK_METHOD0(doit, void(void));
TEST(BTest, Test)
auto mockA = std::make_unique<A>();
EXPECT_CALL(*mockA, doit(_)).Times(1);
B b(std::move(mockA));
b.run();
运行此代码时会泄漏
错误:这个模拟对象(在测试 BTest.Test 中使用)应该被删除,但永远不会。它的地址是@0x1234。
由于预期应该在销毁期间运行,我不确定它为什么会导致问题。
我尝试了这里描述的 shared_ptr 别名方法 - Dependency injection with unique_ptr to mock 但即使我仍然得到那个异常。
【问题讨论】:
【参考方案1】:class A
需要有虚拟析构函数,否则class MockA
的析构函数不会被执行。
【讨论】:
@jack_carver 同样的事情:doIt()
不是虚拟的以上是关于GMock泄漏内存[重复]的主要内容,如果未能解决你的问题,请参考以下文章