小编Ale*_*lex的帖子

将GoogleMock与Boost :: Shared Pointers一起使用时泄露的模拟对象

对于这种特殊情况,我无法摆脱泄漏.

执行测试时,我收到了Leaked Mock Objects的消息.具体消息:

ClassElementFixture.h:102:错误:应删除此模拟对象(在测试ClassElementFixture.initialize中使用)但从不删除.它的地址是@ 0x940a650.

我标记了错误所指的行.这是我的代码的简化版本:

...
class ClassElementFixture: public ::testing::Test
{
    public:
        boost::shared_ptr<fesa::ClassElement> classElement_;
        boost::shared_ptr<fesa::DeviceElementMock> deviceElement_;

        ...

        void SetUp()
        {
            classElement_.reset(new fesa::ClassElement());
        }

        void TearDown()
        {
        }

        void initializeFake()
        {
            fesa::ParserElementFactoryMock factory;
            deviceElement_.reset(new fesa::DeviceElementMock());

            EXPECT_CALL(factory, createDeviceElement(_))
                        .WillOnce(Return(deviceElement1_));
            EXPECT_CALL(*deviceElement_, initialize(_));//Error refers to here

            classElement_->initialize(factory);

            EXPECT_TRUE(Mock::VerifyAndClearExpectations(deviceElement_.get()));
        }
}
Run Code Online (Sandbox Code Playgroud)

我已经找到 为什么GoogleMock泄漏了我的shared_ptr?

在Stack-Overflow,这是相关的.但是那里的建议并没有解决我的问题:X

为了至少抑制错误,我发现的唯一可能性是:

Mock::AllowLeak(deviceElement_.get());
Run Code Online (Sandbox Code Playgroud)

然而,这不是一个非常干净的解决方案=)

那么如何正确摆脱泄漏呢?

c++ memory-leaks shared-ptr googlemock

8
推荐指数
1
解决办法
6551
查看次数

如何读出 gtk3 对象的“空地 ID”

在 Glade 中,可以为对象设置唯一的 ID。在代码中,我们可以通过搜索它的“glade ID”来获取指向该对象的指针gtk_builder_get_object()

然而,对于我当前的用例,我只想从GObject. 有什么 API 可以做到这一点?

glade gtk3

4
推荐指数
1
解决办法
2470
查看次数

标签 统计

c++ ×1

glade ×1

googlemock ×1

gtk3 ×1

memory-leaks ×1

shared-ptr ×1