c++ - 将复制构造函数设置为 private 和 =delete 有什么区别?

标签 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/

相关文章:

c++ - transform() 需要多少个参数?

C++ - vector 迭代错误

c++:动态分配的 new 运算符是否检查内存安全?

c++ - 我在这一行代码中的语法有什么问题(指针和引用以及取消引用哦,我的)?

c++ - 使用枚举类的 undefined symbol

c++ - 带有 C++ 的 OS X 中的 SIMD Sony vector 数学库

c++ - 有没有NSFileCoordinator的替代方案,可以在沙箱中打开相关文件?

c++ - 多态放置的东西的析构函数

c++ - 从 strtok 函数保存值

android - 显示半透明圆圈的快速动画