2016-12-08 19 views
4

我很困惑unique_ptr.release()unique_ptr版本是否会导致内存泄漏?

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

对吗?

回答

12

我说得对不对?

调用release()不漏任何东西,它只是预示着你正在服用的是控制。

如果从智能指针明确释放指针后泄漏指针,即你的错误。

+0

所以如果我把指针指向另一个unique_ptr,它应该没问题呢? – Marc

+0

是的,在你的代码中,它的行为与本杰明的表现完全一样 - 我只是去寻求一般的答案而不是具体的。 – Useless

+0

非常感谢! – Marc

6

内存泄漏,当你失去跟踪的最后一个指针到一个动态分配的对象删除之前发生。由于您首先将指针复制到tmp,因此当您调用release()时,您并未忽略它。所以不,这里没有内存泄漏。

+0

非常感谢!正是我想确定的。 – Marc

相关问题