初始化列表到构造函数

时间:2014-03-24 13:33:22

标签: c++ c++11 initialization initialization-list

我正在学校完成一项作业,我们应该在我们自己的List-class中创建一个构造函数,它将初始化列表作为参数。

这是我希望能够做到的:

List ourList {1, 2, 3};

这是我到目前为止所做的:

List::List(std::initializer_list<int> il)
{
  head_ = copy(il.begin(), il.end());
}

List_Node* List::copy(std::initializer_list<int>::iterator begin,
                      std::initializer_list<int>::iterator end)
{
  if(begin == end)
    return nullptr;

  List_Node* new_list = new List_Node(*begin);

  List_Node* node = copy(begin++, end);
  new_list->next_ = node;
  return new_list;
}

以我的拙见,这应该很有效。但是,当我尝试初始化(List list {1,2,3};)时,我遇到了一个seg-fault。有人可以解释一下我在这里做错了吗?

1 个答案:

答案 0 :(得分:6)

List_Node* node = copy(begin++, end);

这将使用相同的参数再次调用copy,永远递归并永远不会完成。

您应该能够通过使用调试器来查看它崩溃的位置,并且您会看到有List::copy的数百个电话,而不是您预期的三个电话。

您希望++begin不是begin++