在这段代码中:
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 移动到那里的,但我不确定也不相信这个答案。
最佳答案
At which line p is deallocated?
在声明它的作用域的末尾,即本例中的函数 g。那是当具有自动存储的对象被销毁,并且它们的内存被释放时。
你初始化为 42 的动态存储整数将在 f 的末尾被 q 的析构函数释放。这是因为移动构造转移了所有权。
关于c++ - 何时释放 unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234814/