创建std::shared_ptr来分配成员变量时内存泄漏

Memory leak when create std::shared_ptr to assign member variable

本文关键字:变量 成员 内存 泄漏 分配 std shared ptr 创建      更新时间:2023-10-16

下面是一个例子:

class Test {
private:
    std::shared_ptr<int> m_iTest;
    void testLoop(void);
};

void Test::testLoop(void)
{
    for (int i = 0; i < 5; i++)
       m_iTest = std::make_shared<int>;
}

在这段代码中,当调用testLoop函数时,分配新的int类型内存并分配给m_iTest成员变量。第一个循环(i=0),创建新的内存并分配给m_iTest。第二个循环(i=1),创建新的内存并分配给m_iTest.........Hm??那第一个被创造的记忆呢?它是否被删除了?第三个循环(i=2),创建新的内存并分配给m_iTest....Hm. ??

所以,我认为这段代码发生内存泄漏,对吗?或者shared_ptr可以自动删除?

(这只是示例代码。不是关于使用向量或任何…)

当您分配给std::shared_ptr时,先前管理的对象(如果有的话)的引用计数减少1。所以在你的循环中,当你第一次调用make_shared时,你创建了一个引用计数为1的新对象。当您第二次调用它时,您将创建另一个引用计数为1的对象,并且前一个对象的引用计数下降到0,导致它被删除。

所以没有,没有内存泄漏。如果有的话,那也是一个设计糟糕的"智能"指针。