1

所以我创建了一个类Dictionary,它继承自一个基类IEnumerable并包含一个类型的成员ListList有一个const unsigned int&存储和公开其项目计数的成员。

这是Dictionary的构造函数。

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

我将const unsigned int&“初始化”列表中的IEnumerable. 问题是,在's ( type 的成员)IEnumerable之前调用了 's 的初始化程序,所以我传入了一个无效的引用。_listList

有没有办法强制成员_list在基类之前初始化IEnumerable

4

2 回答 2

4

基类总是在直接成员之前初始化。(事实上​​,mem-initializer-list 中的基和成员的顺序没有任何作用——顺序总是由类定义确定。)

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

struct HasList {
    List _list;
    // Might want custom constructors here.
};

class Dictionary
    : private HasList,
      public IEnumerable
{
    // ...

(这是private继承的少数有用用途之一。)

于 2013-02-10T21:56:14.320 回答
0
  1. 在继承类的构造函数之前调用基类构造函数。
  2. 成员按照声明的顺序进行初始化(通常在头文件中),初始化列表的顺序无关紧要。
于 2013-02-10T21:53:57.207 回答