unique_ptr释放会导致内存泄漏吗?

5
我对unique_ptr.release()感到困惑。
我的目标是将一个基类的unique_ptr转换为一个派生类的unique_ptr
所以我找到了这个问题 和答案是:
Derived *tmp = dynamic_cast<Derived*>(basePointer.get());
std::unique_ptr<Derived> derivedPointer;
if(tmp != nullptr)
{
    basePointer.release();
    derivedPointer.reset(tmp);
}

或者

std::unique_ptr<Derived>
    derivedPointer(static_cast<Derived*>(basePointer.release()));

我在想,在执行 basePointer.release(); 后,基础指针会发生什么。

根据这个问题,我理解它会导致内存泄漏。

我的理解正确吗?

2个回答

12

我是不是正确的?

不是。

调用release()并不会泄漏任何东西,它只是表示你正在控制它

如果在从智能指针中显式释放后泄漏了指针,那是你的问题。


那么如果我将指针转换为另一个unique_ptr,那就没问题了吗? - Marc
是的,在您的代码中,它的行为与Benjamin指示的完全一样-我只是选择了通用答案而不是具体答案。 - Useless
没问题 :) - Useless

6

内存泄漏是指在删除动态分配对象之前,您丢失了对最后一个指针的跟踪。由于您首先将指针复制到tmp中,因此在调用release()时没有丢失对它的跟踪。因此,这里没有内存泄漏。


非常感谢!正是我想要确认的内容。 - Marc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接