我读过强烈建议在创建类时初始化所有数据成员,无论类型如何,并且构造函数的初始化列表是执行此操作的最佳位置。
作为对象的数据成员呢?假设该对象有一个足够的默认初始化程序,那么从初始化程序中省略它们是否被认为是一种好习惯?
如:
class A{
private:
AnotherClass B;
int x;
public:
A():x(5){} //B is never explicitly initialized
};
我读过强烈建议在创建类时初始化所有数据成员,无论类型如何,并且构造函数的初始化列表是执行此操作的最佳位置。
作为对象的数据成员呢?假设该对象有一个足够的默认初始化程序,那么从初始化程序中省略它们是否被认为是一种好习惯?
如:
class A{
private:
AnotherClass B;
int x;
public:
A():x(5){} //B is never explicitly initialized
};
如果您不使用成员初始化器列表来初始化用户定义类型的成员,则将调用该特定类型的默认构造函数来初始化成员对象。
因此,只要您的成员有可用的默认构造函数并且这是您的意图,那就完全没问题了。
从初始化程序中省略它们是否被认为是一种好习惯?
这是一个选择和偏好的问题。对我来说,成员初始化列表更直观,所以我更喜欢它们。
是的,完全没问题。
假设您有一个非常复杂的类,其中包含许多成员,其中大多数是对象,它们确实具有默认构造函数。由于将调用它们的默认构造函数,因此您无需担心 - 它们仍将被初始化。
建议从标准类型(如int
,bool
等)初始化所有成员,因为它们没有默认值。
在您的情况下 - 如果B
没有默认构造函数,您将遇到编译错误,然后您必须B
在A::A
.