在查bug中,发现一个参数在构造函数中初始化了,但在拷贝构造函数中未赋值,结果在vector::resize中调用了拷贝构造函数,参数未初始化,导致在release 和 debug版本中结果不一样的问题。
写个dome说明下:
从结果上可以看出,vector::resize 第一个类先调用构造函数,后面都直接调用拷贝构造函数。 而reserve只是开辟空间,为做任何填充。
我的编译器为vs2008, 从结果看Release 版本编译器的初始化值是未知的,而debug版本 float的编译器会填充为-431602080, int编译器会填充为-842150451。
所以切忌 所有构造函数都应该初始化参数,包括拷贝构造、赋值构造函数。
添加参数的时候,千万不要漏了在拷贝构造函数中赋值