最近在看《深度探索C++对象模型》,看的头大。对于c++默认构造函数,一直有两个错误的认识。
1,没有定义默认构造函数的类都会被编译器生成一个默认构造函数。
2,编译器生成的默认构造函数会初始化所有数据成员。
而lippman在书中告诉我们 以上两个理解是错误的。
先看第2条,举个例子。
#include <iostream>
using namespace std;
class Base {
public:
~Base() {}
int val;
};
int main()
{
Base b;
cout << b.val << endl;
return 0;
}
编译运行上述代码,可以得到结果
-1218625548, 显然这是未初始化。所以编译器生成的默认构造函数并不初始化所有成员,比如int,char等。
C++标准规定:如果类的设计者并未为类定义任何构造函数,那么会有一个默认 构造函数被暗中生成,这个暗中生成的默认构造函数通常是不做什么事的,而我们通常所说的默认构造函数是有用的,也就是所谓的 nontrivial default constructor。