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

时间:2015-07-29 03:08:53

标签: c++ memory-leaks

这是一个示例类。

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可以自动删除吗?

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

1 个答案:

答案 0 :(得分:3)

当您分配到make_shared时,先前管理的对象(如果有的话)的引用计数下降1.因此在您的循环中,当您第一次调用{{1}}时,您创建一个引用计数为1的新对象。第二次调用它时,您创建另一个引用计数为1的对象,并且前一个对象的引用计数下降到0,从而导致它被删除。

所以不,没有内存泄漏。如果有的话,它将是一个设计糟糕的&#34; smart&#34;指针。