C++将操作符放在类的末尾是什么意思?

kla*_*aus 4 c++ operator-keyword

假设我有一个名为Component的简单c ++组件,如下所示:

class Component {
 public:
  explicit Component(int i)
  : _integer(i) {
  }

  ~Component() {
  }

  private:
   int _integer;

  Component(const Component&);
  Component& operator=(const Component&);
};
Run Code Online (Sandbox Code Playgroud)

我通常在代码中发现我读了最后两条指令,但我真的不明白.是否必须正确使用该组件?

Sto*_*ica 10

这声明了一个重载operator=.重载操作符通常允许您控制赋值表达式(a = b)的执行方式.

然而,在这种情况下,感兴趣的不是运算符最后的事实,而是它在私有访问说明符下.这意味着外部代码可能不会对对象执行赋值(或复制构造,因为复制c'tor也存在)Component.

类中的代码(在成员函数中)可以分配和复制构造.但我会说它不太可能.将这两个特殊成员函数标记为私有,而不是定义它们是C++ 03禁用类复制的方法.必须声明它们以防止编译器合成默认的复制构造函数和赋值运算符.

在现代C++中,可以通过显式删除这些函数将"未定义符号"错误转换为编译时错误:

Component(const Component&) = delete;
Component& operator=(const Component&) = delete;
Run Code Online (Sandbox Code Playgroud)

  • @klaus - 这在很大程度上取决于课程.所以我不能在这里给出绝对的建议.但是,我会说,如果你编写一个逻辑很重的类,默认情况下禁用复制可能是个好主意.如果需要,您可以随时添加它. (2认同)