【问题标题】:Does unique_ptr release cause memory leaks?unique_ptr 释放会导致内存泄漏吗?
【发布时间】:2016-12-08 18:06:37
【问题描述】:

我对@9​​87654324@ 感到困惑。

我的目标是将基类的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,我知道它会导致内存泄漏。

我说的对吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

    我说的对吗?

    没有。

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

    如果在从智能指针显式释放指针后泄漏了一个指针,那是你的错误。

    【讨论】:

    • 那么如果我将指针转换为另一个unique_ptr,那应该没问题吧?
    • 是的,在您的代码中,它的行为与 Benjamin 指示的完全一样 - 我只是寻求一般答案而不是具体答案。
    • 完全没问题:)
    【解决方案2】:

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

    【讨论】:

    • 非常感谢!正是我想要确定的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2021-03-23
    • 2021-09-25
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多