此代码编译成功。错误:这里声明unique_ptr(const unique_ptr&)= delete;
#include<iostream>
#include<memory>
using namespace std;
class A{
public:
unique_ptr<A> myval;
A(){ cout<<"Constrcutor of A is called"<<endl; }
~A(){cout<<"Destructor of A is called"<<endl;}
unique_ptr<A> getsomething()
{
unique_ptr<A> myval;
myval.reset(new A);
return myval;
}
};
但是当我评论本地unique_ptr<A> myval;
编译器会抛出错误。
shared_test.cpp: In member function ‘std::unique_ptr<A> A::getsomething()’:
shared_test.cpp:12:10: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = A; _Dp = std::default_delete<A>]’
return myval;
^
In file included from /usr/include/c++/4.8/memory:81:0,
from shared_test.cpp:2:
/usr/include/c++/4.8/bits/unique_ptr.h:273:7: error: declared here
unique_ptr(const unique_ptr&) = delete;
^
我无法理解这个错误的含义。它是什么?
你明白为什么原始代码会编译吗?因为这也是一个有趣的问题,如果你不这样做,这个答案可能会很长。 – juanchopanza