我对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,我了解它会导致内存泄漏。
我是对的吗?
答案 0 :(得分:12)
我是对的吗?
没有
调用release()
不会泄露任何内容,它只是表明您正在控制它。
如果你在从智能指针明确释放指针后泄漏了指针,那就是你的错误。
答案 1 :(得分:6)
在删除动态分配的对象的最后一个指针之前,会发生内存泄漏。由于您首先将指针复制到tmp
,因此在调用release()
时您没有忘记它。所以不,这里没有内存泄漏。