unique_ptr<T>
不允许复制构造,而是支持移动语义。但是,我可以unique_ptr<T>
从函数返回a 并将返回的值分配给变量。
#include <iostream>
#include <memory>
using namespace std;
unique_ptr<int> foo()
{
unique_ptr<int> p( new int(10) );
return p; // 1
//return move( p ); // 2
}
int main()
{
unique_ptr<int> p = foo();
cout << *p << endl;
return 0;
}
上面的代码按预期进行编译和工作。那么,该行如何1
不调用复制构造函数并导致编译器错误呢?如果我不得不使用line,2
那将会很有意义(使用line 2
也可以,但是我们不需要这样做)。
我知道C ++ 0x允许发生此异常,unique_ptr
因为返回值是一个临时对象,一旦函数退出,该对象将被销毁,从而保证了返回指针的唯一性。我很好奇这是如何实现的,它是在编译器中进行特殊处理还是在该语言规范中使用了其他条款?
unique_ptr
。整个问题是关于1和2是实现同一件事的两种不同方式。
main
函数退出后执行,而在foo
退出时不会执行。