<分区>
我看到很多书都推荐使用=delete
,这个是不是很清楚是什么意思? (使程序更具可读性)而不是说将复制构造函数设置为私有(private)是一件坏事?
思考你的答案
class A {
A(const A&);
// some functions and variable
public:
// or you can A(const A&)=delete;
// do something
};
标签 c++
<分区>
我看到很多书都推荐使用=delete
,这个是不是很清楚是什么意思? (使程序更具可读性)而不是说将复制构造函数设置为私有(private)是一件坏事?
思考你的答案
class A {
A(const A&);
// some functions and variable
public:
// or you can A(const A&)=delete;
// do something
};
最佳答案
这是一个相对较新的功能(在 2011 年的 C++ 修订版中添加),其主要动机无疑是可读性和意图的清晰度。然而,区别不仅仅是表面上的。
请记住,对于在类中声明的构造函数,没有什么能阻止其他翻译单元实际提供定义。通常只在头文件中列出类的成员函数并在单独的 .cpp 中实现它们。如果有人从类内部使用复制构造函数,编译器会提示定义丢失(“ undefined reference ...”)。如果一个天真的程序员以某种方式得出你忘记实现它的结论是因为你从来不需要它,他们可以继续这样做。突然你的类是可复制的,即使只能从它自己的成员函数(和 friend )中复制。 =delete
构造函数阻止了这种情况,并且编译器错误更好(通常是“无法复制对象,因为复制构造函数被声明为已删除”而不是“未定义对 . ..”或“A::A 在此上下文中是私有(private)的”)。
关于c++ - 将复制构造函数设置为 private 和 =delete 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900845/