这是一个示例类。
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…………嗯???那么第一个创建的内存呢?是删还是不删?而第三个循环(i=2),创建新内存并分配给m_iTest....Hm..???
所以,我认为这段代码发生了内存泄漏,对吧?还是可以自动删除shared_ptr?
(这只是示例代码。不涉及使用 vector 或任何...)
最佳答案
当您分配给 std::shared_ptr
时,先前管理的对象(如果有的话)的引用计数会减 1。因此在您的循环中,当您调用 make_shared
第一次,你创建了一个引用计数为1的新对象。当你第二次调用它时,你创建了另一个引用计数为1的对象,并且前一个对象的引用计数下降到 0,导致它被删除。
所以不,没有内存泄漏。如果有,那将是一个设计糟糕的“智能”指针。
关于c++ - 创建 std::shared_ptr 以分配成员变量时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690599/