我知道使用像std::shared_ptr
这样的智能指针会在指针超出范围时添加垃圾收集,但是如果我调用make_shared()
多个,我还不清楚垃圾收集是否也有效一次shared_ptr
上的时间。
例如:
std::shared_ptr<MyClass> mcPtr;
void assignment(int i)
{
mcPtr = std::make_shared<MyClass>(i);
}
void main()
{
assignment(5);
// Some time later
assignment(10); // Does this cause a memory leak?
}
答案 0 :(得分:2)
使用std::shared_ptr
不会添加垃圾收集,但是当在范围的末尾销毁共享指针时,会在其中声明它的析构函数将被调用。共享指针的析构函数处理释放内存。
现在,当您致电=
std::shared_ptr::operator=()
时从标准20.8.2.2.3.4
效果:相当于
shared_ptr(std::move(r)).swap(*this)
因此,mcPtr
获得新shared_ptr
的值,新shared_ptr
获取mcPtr
的内容。然后新shared_ptr
超出范围,调用析构函数,shared_ptr
自行处理。