Item 04:确定对象被使用前已先被初始化
Item 04: Make sure that objects are initialized before they’re used
读取未初始化的值会导致不明确的行为。而最佳的处理办法就是:永远在使用对象之前先将它初始化。
对于内置类型,你必须手工完成此事。
对于内置类型以外的任何其他东西,初始化责任落在构造函数身上。规则很简答:确保每一个构造函数都将对象的每一个成员初始化。
赋值和初始化
“确保每一个构造函数都将对象的每一个成员初始化”看起来很容易奉行,重要的是别混淆了赋值和初始化。
class PhoneNumber { ... };
class ABEntry { // ABEntry = “Address Book Entry”
public:
ABEntry(const std::string& name, const std::string& address,
const std::list<PhoneNumber>& phones);
private:
std::string theName;
std::string theAddress;
std::list<PhoneNumber> thePhones;
int numTimesConsulted;
};
ABEntry::ABEntry(const std::string& name, const std::string& address,
const std::list<PhoneNumber>& phones)
{
theName = name; // 这些都是赋值,
theAddress = address;