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泄漏内存[重复]的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏 NSAutoreleasePool [重复]

检查Windows中的内存泄漏[重复]

如何检查 C++ 代码中的内存泄漏。有没有检查内存泄漏的免费工具[重复]

C ++中的内存泄漏示例(通过使用异常)[重复]

用任务管理器杀死时如何防止内存泄漏[重复]

c ++ dll中的内存泄漏[重复]