使用初始化列表的优点?

时间:2010-11-27 02:58:43

标签: c++

  

可能重复:
  Benefits of Initialization lists

我想知道使用初始化列表初始化成员是否有利于将这些成员放入构造函数中。某些东西必须使用初始化列表,但对于大多数没有的东西,是否有区别?我更喜欢后者,因为当我有多个构造函数时,我更喜欢简单地调用construct()来促进代码重用。

由于

5 个答案:

答案 0 :(得分:12)

如果不使用初始化列表,则成员或基类在开始大括号之前获取默认构造。

因此,您稍后设置它的电话会添加operator=()电话。

如果使用初始化列表,则成员或基类具有名为。

的正确构造函数

根据您的课程,这可能是必需的或更快。

答案 1 :(得分:10)

对于原语,使用初始化列表或通过赋值构建它们没有区别。

对于其他类型,初始化列表可能会在构造对象时为您提供性能改进。

请注意,初始化的顺序(在初始化列表中)取决于类中声明的顺序。如果声明乱序并且您需要构建依赖于其他事先已经初始化的数据的数据,那么“当可能的规则使用初始化列表时”这是一个例外。

更多信息:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6

答案 2 :(得分:2)

除了其他人提到的内容之外,它还允许消除阴影变量的歧义,因此在必须写this->var = var的地方你可以改为myclass(int var) : var(var)。当然,如果你有一个很大的构造函数,有些人可能会觉得这很混乱/难以阅读

答案 3 :(得分:2)

此外,永远不要在初始化程序列表中执行非托管资源获取。换句话说,要么使用“资源获取是初始化”(从而完全避免非托管资源),要么在构造函数体中执行资源获取。

警告#2 在其自己的代码语句中执行每个资源分配(例如,新),该代码语句立即将新资源提供给管理器对象(例如,auto_ptr)。

http://www.gotw.ca/gotw/056.htm

答案 4 :(得分:1)

除了被强制使用初始化列表用于常量和引用之外,它也很有用,因为它可以避免在输入构造函数之前默认构造成员对象,然后立即分配它,如果成员对象很昂贵,这可能是低效的构建