簡體   English   中英

std :: make_shared <Type> 造成內存泄漏

[英]std::make_shared<Type> creates memory leak

當我使用std :: make_shared時,Valgrind給了我一些內存泄漏:

TEST_F(CTestChild, add_gran_child) {
    auto child{ std::make_shared<CChild>(TType::Home, std::make_shared<CMockParent>()) };
    NiceMock<CMockCaller> caller;
    auto gran_child( std::make_shared<CMockGranChild>(TType::Girl, child, caller) );
    child->Add(gran_child);
    EXPECT_EQ(child->GetCount(), 1);
}

class CMockParent : CParent{
public:
    void something(void) override {}
}

class CParent{
public:
    virtual void something(void) = 0;
}

class CChild{
public:
    CChild(TType, shared_ptr<CParent> a) : _parent(a) {}
    void Add(shared_ptr<CGranChild> a) { _list.push_back(a) }
    shared_ptr<CParent> _parent;
    TList<shared_ptr<CGranChild>> _list;
}

class CGranChild{
public:
    CGranChild(TType, shared_ptr<CChild> a) : i_parent(a) {}
    shared_ptr<CChild> _parent;
}

為什么make_shared給我內存泄漏?

編輯:為了更好地理解代碼,我提供了類的摘要。

您有2個彼此擁有的共享指針。

想出一個明確的所有權概念。 然后將std::weak_ptr存儲在非所有者中。 要訪問非擁有對象.lock() ,weak_ptr並在使用前檢查生成的shared_ptr。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM