07 August 2022

C++ 核心指南目录

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::mapstring 都有相应的默认构造和拷贝操作符,所以不需要额外处理。

注意

这就是所谓的零规则(the rule of zero)

强化

好的静态代码分析工具能够检测到可能存在的改进点。比如一个类有指针和数组大小这样的成员数据对,还有析构函数删除指针指向的内存,静态代码分析工具可以提示此处用 vector 是否更好。