std::make_shared<Type> 会产生内存泄漏

std::make_shared<Type> creates memory leak

本文关键字:gt 内存 泄漏 Type shared lt std make      更新时间:2023-10-16

当我使用 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。