这是一个示例类。
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可以自动删除吗?
(它只是示例代码。不是关于使用向量或任何...)
答案 0 :(得分:3)
当您分配到make_shared
时,先前管理的对象(如果有的话)的引用计数下降1.因此在您的循环中,当您第一次调用{{1}}时,您创建一个引用计数为1的新对象。第二次调用它时,您创建另一个引用计数为1的对象,并且前一个对象的引用计数下降到0,从而导致它被删除。
所以不,没有内存泄漏。如果有的话,它将是一个设计糟糕的&#34; smart&#34;指针。