CppCoreGuidelines C.20 尽量不去修改类的默认操作
07 August 2022
C.20: If you can avoid defining default operations, do
理由
简单,清晰,语义明确。
例子
struct Named_map { public: // ... no default operations declared ... private: string name; map<int, int> rep; }; Named_map nm; // default construct Named_map nm2 {nm}; // copy construct
因为std::map
和 string
都有相应的默认构造和拷贝操作符,所以不需要额外处理。
注意
这就是所谓的零规则(the rule of zero)
强化
好的静态代码分析工具能够检测到可能存在的改进点。比如一个类有指针和数组大小这样的成员数据对,还有析构函数删除指针指向的内存,静态代码分析工具可以提示此处用 vector
是否更好。