考虑下面的针对公司仪器设计的class,仪器识别码是一定的有的一个constructor自变量:
class EquipmentPiece
{
public:
EquipmentPiece(int IDNumber);
...
};
1.第一种情况,在产生数组的时候,一般而言没有任何方法可以为数组中的对象指定constructor自变量。所以几乎不可能产生一个由EquipmentPiece objects构成的数组:
EquipmentPiece bestPieces[10]; //错误
EquipmentPiece* bestPieces = new EquipmentPiece[10]; //错误
2.class如果缺乏default constructor 带来的第二个缺点是:它们将不适合于许多templateed-based container classes。对于那些templates而言,被实例化的”目标类型“必须的有一个default constructors。
例如一个Array class而写的template可能看起来像这样:
template<class T>
class Array
{
public:
Array(int size);
...
private:
T* data;
};
template<class T>
Array<T>::Array(int size)
{
data = new T[size]; //数组中每个元素调用T::T();
...
}
3.最后一中情况下是virtual base classes有关,virtual base classes如果缺乏default constructor,与之合作将是一种惩罚。
由于“缺乏 default constructor”带来的诸多束缚,有些人便认为所有的class都应该提供default constructor 甚至即使其default constructor没有足够信息将对象完整的初始化。如下:
class EquipmentPiece
{
public:
EquipmentPiece(int IDNumber = UNSPECIFIED);
...
private:
static const int UNSPECIFIED;
};
这就允许EquipmentPiece objects被这样生产出来:
EquipmentPiece e; //现在这样可行。
这几乎总是造成class内的其他member functions变得复杂,因为这便不再保证一个EquipmentPiece object的所有字段都有意义的初值。大部分的member functions便必须检查ID是否存在,否则就会出问题。
添加无意义的default constructor,也会影响效率。