昨天发生了一个错误,错误的原因非常简单就是因为,没有初始化。《C++编程思想》提出了一个观点,大多数的错误都是因为没有初始化。那么,我们认为C++和C的一个重要区别就是提供了类,而类的出现是为了聚合同类的数据和操作。但为什么会有构造函数和析构函数呢?我觉得这就是C++的哲学了——为了规避初始化之痛。
我们知道局部变量是不会默认初始化的。但对于类来说,我们通常有意识的在构造函数中初始化这些变量或者对象。注意,这里是个关键,如果没有特殊指定,构造函数会调用成员对象的默认构造函数,这里就是关键所在了。对于基础变量来说,是没有所谓构造函数的,那么这部分变量就必须在构造函数中显示初始化。但我们认为这并不是特别容易出错的地方。
那么对于struct呢?C++中的Struct,我们可以认为这就是一个类,不同的只是这个类的默认对象权限不同。对于struct的运用,我们通常沿袭了C的用法。我犯的错误是没有初始化Struct。养成一个好习惯很重要,那么对于C风格的Struct,我们应该习惯用memset初始化一下,这能规避很多错误。呵呵,不用担心这没有问题,C风格的Struct不存在隐含成员,所以一般不会造成错误。我相信virtual是很少出现在struct中的。
OK! 所以,最重要的原则——对象(变量,资源……)务必在使用前初始化。