我知道使用像 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?
}
最佳答案
使用 std::shared_ptr
不添加垃圾收集,但是当共享指针在范围末尾被销毁时,将调用在其声明的析构函数中。共享指针的析构函数处理释放内存。
现在当你调用 =
std::shared_ptr::operator=()
叫做。来自标准 20.8.2.2.3.4
Effect: Equivalent to
shared_ptr(std::move(r)).swap(*this)
所以 mcPtr
被赋予新的 shared_ptr
的值,新的 shared_ptr
得到 mcPtr
的内容.然后新的 shared_ptr
超出范围,析构函数被调用,shared_ptr
自行处理。
关于c++ - 多次调用 make_shared() 时的 shared_ptr 垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589023/