我有一个无法复制的类。复制这个类可能会出问题。我想要保证它永远不会被复制,因此我将其复制构造函数设为deleted
:
class A {
public:
A();
A(const A&) = delete;
};
A fun() {
return A();
};
int main() {
A a = fun();
};
很遗憾,由于某个原因,g++无法编译此代码:
t.cc: In function ‘A fun()’:
t.cc:8:12: error: use of deleted function ‘A::A(const A&)’
return A();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
t.cc: In function ‘int main()’:
t.cc:12:13: error: use of deleted function ‘A::A(const A&)’
A a = fun();
^
t.cc:4:5: note: declared here
A(const A&) = delete;
^
但这是一个非常明显需要使用复制省略的情况,因此复制构造函数不应该被调用。为什么呢?
std :: unique_ptr <A>
。 - Chris Beck