首页 > 解决方案 > 何时释放 unique_ptr?

问题描述

在这段代码中:

void f(std::unique_ptr<int> q)
{
}

void g()
{
    std::unique_ptr<int> p{new int{42}};
    f(std::move(p));
}

p 在哪一行被释放?我会在 f 函数的出口处说,因为它是使用 std::move 移到那里的,但我不确定也不确定这个答案。

标签: c++c++11memory-managementsmart-pointersunique-ptr

解决方案


p 在哪一行被释放?

在声明它的范围的末尾,即在这种情况下的函数 g 。那是当具有自动存储的对象被销毁,并且它们的内存被释放时。

初始化为 42 的具有动态存储的整数将由 f 末尾的 q 的析构函数释放。这是因为搬迁建设转移了所有权。


推荐阅读