条款四 避免不必要的默认构造函数
默认构造函数(指没有参数的构造函数)是指C++语言中,你不用传参数就可以调用的构造函数。构造函数用于初始化对象,而默认构造函数可以在不依赖任何外部信息的情况下创建对象。
在一个完美的世界里,无需任何外部信息即可创建对象的类可以包含默认构造函数,而需要额外信息来创建对象的类则不包含默认构造函数。可是我们的世界是不完美的,所以我们必将一些额外的因素考虑在内。特别地,如果一个类没有默认构造函数,使用这个类的时候就会有一些限制。
没有默认构造函数,在三种情况下它的应用可能会出现问题:
第一个问题是创建数组的时候,通常没有很好的办法可以指定数组元素的构造函数的参数。
第二个问题是没有默认构造函数的类他们无法作为许多基于模板的容器类的类型参数使用。因为通常用于实例化模板的哪些类型需要提供默认构造函数。
第三个问题是在有虚基类的时候应该提供默认构造函数还是不提供默认构造函数。没有默认构造函数的虚基类使用起来很痛苦,这是因为虚基类的构造函数所要求的参数必须由创建对象所属的最远的派生类所提供。
正因为这些强加于没有默认构造函数的类上的重中限制,一些人认为所有的类都应该有默认构造函数,即使默认构造函数没有足够的信息来完全初始化一个对象。
但是默认构造函数会影响类的运行效率,有时会使其他成员函数变得复杂。
如果一个类的构造函数能够确保所有的数据成员被正确初始化,就能避免付出一些代价。通常默认构造函数不提供这些保证。如果默认构造函数对于某些类没有太大意义,最好避免使用他们。这给使用这种类加了一些限制,但是当你使用它时,它可以向你保证你能很放心地相信这个类被正确得初始化,并且具有高效的效率。
说实话,这一章节我看得不是很明白。
作者在一开始,列举了一些没有默认构造函数我们可能遇到的问题,在这些问题下,进而得出默认构造函数所带来的一些效率和代价困扰。看来还需要在实践中仔细揣摩揣摩。
posted on 2009-09-22 13:33
Sandy 阅读(495)
评论(0) 编辑 收藏 引用 所属分类:
c++学习