从函数返回unique_ptr
unique_ptr<T>
不允许复制构造,而是支持移动语义。然而,我可以unique_ptr<T>
从函数返回一个并将返回的值赋给变量。
#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
因为返回值是一个临时对象,一旦函数退出就会被销毁,从而保证返回指针的唯一性。我很好奇这是如何实现的,它是在编译器中特殊的,还是在语言规范中有一些其他条款可以利用?
肥皂起泡泡
狐的传说
幕布斯7119047
相关分类