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)