unique_ptr释放是否会导致内存泄漏?

时间:2016-12-08 18:06:38

标签: c++

我对unique_ptr.release()感到困惑。

我的目标是将unique_ptr基类强制转换为派生类的unique_ptr

所以我找到了question 答案是

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();之后基指针发生了什么。

基于此question,我了解它会导致内存泄漏。

我是对的吗?

2 个答案:

答案 0 :(得分:12)

  

我是对的吗?

没有

调用release()不会泄露任何内容,它只是表明您正在控制它

如果在从智能指针明确释放指针后泄漏了指针,那就是你的错误。

答案 1 :(得分:6)

在删除动态分配的对象的最后一个指针之前,会发生内存泄漏。由于您首先将指针复制到tmp,因此在调用release()时您没有忘记它。所以不,这里没有内存泄漏。