初始化程序列表不正常

Initialiser list not in order

本文关键字:不正常 列表 程序 初始化      更新时间:2023-10-16

因此,我创建了一个名为Dictionary的类,它继承自基IEnumerable,并包含一个类型为List的成员。List有一个const unsigned int&成员,该成员存储并公开其项目计数。

这是Dictionary的构造函数。

Dictionary() : _list(), IEnumerable(_list.Count)
{ }

我将"已初始化"列表中的const unsigned int&传递给IEnumerable。问题是,IEnumerable的初始化程序在_list(类型为List的成员)之前被调用,所以我传入了一个无效的引用。

是否有任何方法可以强制成员_list在基类IEnumerable之前初始化?

基类总是在直接成员之前初始化。(事实上,mem初始值设定项列表中的基和成员的顺序没有任何作用——顺序总是由类定义决定的。)

一种解决方法是将您的成员移动到另一个基类。

struct HasList {
    List _list;
    // Might want custom constructors here.
};
class Dictionary
    : private HasList,
      public IEnumerable
{
    // ...

(这是private继承为数不多的有用用途之一。)

  1. 基类构造函数在继承类的构造函数之前调用
  2. 成员按照声明的顺序进行初始化(通常在头文件中),初始化列表的顺序无关紧要