何时释放unique_ptr?

Pie*_*sce 1 c++ memory-management smart-pointers unique-ptr c++11

在此代码中:

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

void g()
{
    std::unique_ptr<int> p{new int{42}};
    f(std::move(p));
}
Run Code Online (Sandbox Code Playgroud)

p分配在哪一行?我想在f函数的出口处说一下,因为它是使用std :: move移到那里的,但是我不确定对此答案也不确定。

Hol*_*Cat 5

p释放在哪条线上?

p是一个对象,对象可以被破坏。可以释放的是敌人。

当控件离开时(被存储时),p最初分配的内存(由分配new int{42})被释放。fq

p当控制权离开g时,它本身就被销毁(那时候p为空,即没有指向任何东西)。


eer*_*ika 5

p分配在哪一行?

在声明它的作用域的末尾,在这种情况下是函数g。那是当具有自动存储的对象被销毁,并且它们的内存被重新分配时。

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