原因
成员变量的初始化工作在进入构造函数之前;
举例
// 错误做法 class ABEntry{ public: ABEntry(const std::string& name){ name_ = name;//这里是赋值操作,name_在进入构造函数之前就被初始化 } private: std::string name_; } // 正确做法 class ABEntry{ public: ABEntry(const std::string& name):name_(name){ } private: std::string name_; }
说明
正确做法仅仅调用一次copy构造函数,而错误做法中会先调用默认构造函数在调用赋值函数,相比之下效果低。
其他
class的成员变量初始化顺序总是相同的,按照申明次序; base classes更早于derived classes;
利用“member initialization list”初始化类成员
最新推荐文章于 2021-12-19 21:17:13 发布