C++ 为什么unique_ptr在超出范围时不会立即销毁对象?
我有以下代码:C++ 为什么unique_ptr在超出范围时不会立即销毁对象?,c++,C++,我有以下代码: struct C { C() {std::cout << ">>> constructor\n"; } ~C() {std::cout << ">>> destructor\n"; } }; void bar(std::unique_ptr<C>&& p) { std::cout &
struct C
{
C() {std::cout << ">>> constructor\n"; }
~C() {std::cout << ">>> destructor\n"; }
};
void bar(std::unique_ptr<C>&& p)
{
std::cout << "bar\n";
}
int main()
{
auto instance = std::make_unique<C>();
std::cout << "after construction\n";
bar(std::move(instance)); // #1
std::cout << "after bar\n";
return 0;
}
为什么会这样?如何解释这种行为?std::move实际上并不移动。它只是将其强制转换为右值引用
改变
void bar(std::unique_ptr<C>&& p)
到
在移动构造函数中实际执行移动。std::move实际上不移动。它只是将其强制转换为右值引用
改变
void bar(std::unique_ptr<C>&& p)
到
在移动构造函数中实际执行移动。尝试从barThan中删除(&A),尝试思考(&A),并提供有关如何使用它的额外信息尝试从barThan中删除(&A),尝试思考(&A),并提供有关如何使用itOr bar的额外信息,可以执行类似std::unique_ptr xstd::movep的操作,这也会移动,或者bar可以做一些类似std::unique_ptr xstd::movep的事情,这也会移动。
void bar(std::unique_ptr<C> p)