《Effective C++》读书笔记04:确保对象在使用之前被初始化
我自己在写代码的时候也经常会遇到忘记初始化某对象的问题,而且这些错误比较难以调试,Meyers提出了一些避免这些错误的解决方法:
1.手工初始化所以内置类型:
这一条很好理解,对于int,enum等内置类型,在使用前一定要初始化。
2.对于类类型等用户自定义的对象,使用成员初值列初始化所有的对象:
1 using namespace std; 2 3 class PhoneNumber{}; 4 class Customer 5 { 6 public: 7 Customer(const string& name, const string& address, 8 const PhoneNumber& phone); 9 private: 10 string theName; 11 string theAddress; 12 PhoneNumber thePhone; 13 int usedTimes; 14 } |
1 Customer::Customer(const string& name, const string& address, const PhoneNumber& phone) 2 { 3 theName = name; //这些都是赋值 4 theAddress = address;//而不是初始化 5 thePhone = phone; 6 usedTimes = 0; 7 } |
可是,在c++中,对不是内置型的对象的初始化都发生在进入构造函数之前,也就是说,在进行theName = name;赋值之前,theName就已经进行了初始化了,这个过程调用自己的默认构造函数。
紧接着有立刻进行了赋值操作,这样会造成额外的浪费,所以我们可以这样写构造函数: