C++ `std::unique_ptr`使编译错误'候选构造函数(隐式副本构造函数)不可行`
C++ `std::unique_ptr`使编译错误'候选构造函数(隐式副本构造函数)不可行`,c++,constructor,static-methods,unique-ptr,C++,Constructor,Static Methods,Unique Ptr,std::unique_ptr使编译错误候选构造函数(隐式副本构造函数)不可行 让我用下面的代码来声明它 导致编译错误的代码是: 代码0:错误 #include <iostream> class A { public: static A str(){ return A();} std::unique_ptr<int> pi; A(): pi(new int(0)){} }; 但以下所有示例都是ok #include <iostream>
std::unique_ptr
使编译错误候选构造函数(隐式副本构造函数)不可行
让我用下面的代码来声明它
导致编译错误的代码是:
代码0:错误
#include <iostream>
class A {
public:
static A str(){ return A();}
std::unique_ptr<int> pi;
A(): pi(new int(0)){}
};
但以下所有示例都是ok
#include <iostream>
class A {
public:
//static A str(){ return A();}
std::unique_ptr<int> pi;
A(): pi(new int(0)){}
};
#include <iostream>
class A {
public:
static A str(){ return A();}
//std::unique_ptr<int> pi;
A()/*: pi(new int(0))*/{}
};
#include <iostream>
class A {
public:
static A str(){ return A();}
std::shared_ptr<int> pi;
A(): pi(new int(0)){}
};
代码1:正常
#include <iostream>
class A {
public:
//static A str(){ return A();}
std::unique_ptr<int> pi;
A(): pi(new int(0)){}
};
#include <iostream>
class A {
public:
static A str(){ return A();}
//std::unique_ptr<int> pi;
A()/*: pi(new int(0))*/{}
};
#include <iostream>
class A {
public:
static A str(){ return A();}
std::shared_ptr<int> pi;
A(): pi(new int(0)){}
};
有人能解释一下吗?这里编译得很好,您使用的是
-std=c++11
?您是否包括
?@orlp和-std=c++11
,即使不包括
,也没关系。代码在c++11中是正确的,在c++03中是不正确的(因为std::unique_ptr
在c++03中不存在),其中@M:也是来自c++11
。与之有什么区别?@user3909241unique\u ptr
不可复制。它只能移动。在C++11中返回A()
是一个移动操作,但在C++03中它是一个复制操作,因为C++03没有移动。