CppCoreGuidelines C.51 把类里通用的构造部分放到一个共用构造函数里
21 October 2022
C.51: Use delegating constructors to represent common actions for all constructors of a class
理由
避免重复和不小心编写导致的差异。
例子
class Date { // BAD: repetitive int d; Month m; int y; public: Date(int dd, Month mm, year yy) :d{dd}, m{mm}, y{yy} { if (!valid(d, m, y)) throw Bad_date{}; } Date(int dd, Month mm) :d{dd}, m{mm} y{current_year()} { if (!valid(d, m, y)) throw Bad_date{}; } // ... };
重复相同的动作繁琐又容易出错。
例子
class Date2 { int d; Month m; int y; public: Date2(int dd, Month mm, year yy) :d{dd}, m{mm}, y{yy} { if (!valid(d, m, y)) throw Bad_date{}; } Date2(int dd, Month mm) :Date2{dd, mm, current_year()} {} // ... };
Data2 中第二个构造函数调用第一个构造函数做一些共用的初始化过程。
如果重复动作只是简单的初始化,可以考虑类成员的默认初始化值。
强化
- 查找构造函数体内相似的部分