提问者:小点点

在C++中初始化构造函数中用户定义对象的成员数组


如何在构造函数中初始化成员数组? 成员数组是用户定义对象的数组(类)。 此外,数组中的元素数量可能大于100,因此我不喜欢使用C++11中提供的初始化列表(除非有更好的方法)

例如,请参考以下代码:

class Foo {
private:
   void *a;
   int b;
public:   
   Foo(void *, int);
   ~Foo();
}

class Bar {
private:
    Foo mObj[150];
public:
    Bar();
    ~Bar();
};

Bar::Bar() {
// ???
}

为了简单起见,假设我想按如下方式初始化成员:假设成员int b存储sr.no&; void*从现在起存储空ptr.。。 所以mobj[0]={0,nullptr},mobj[1]={1,nullptr}&; 依此类推。

  1. 我的Bar::Bar()构造函数应该是什么样的?
  2. 是否需要有默认常量,复制常量和 operator=for Foo()?
  3. 使用向量而不是数组是更好的选择吗?

共1个答案

匿名用户

从注释来看,当前的最终任务似乎是用参数(i,nullptr)为数组的每个元素调用foo构造函数,其中i在每次迭代时从0增加到N。

下面是使用std::index_sequence执行此操作的代码。 这只是在C++14中引入的,所以如果您不使用它,您将不得不自己实现它,这一点也不难--如果您需要帮助,请告诉我。

#include <array>
#include <utility>
#include <cstddef>

struct Foo {
    Foo(void*, int);
};

class Bar {
private:
    static constexpr size_t array_sz = 150;
    template<size_t... Ix> Bar(std::index_sequence<Ix...> ) :
        mObj{Foo{nullptr, Ix}...}     { }
    std::array<Foo, array_sz> mObj;
public:
    Bar();
    ~Bar();
};

Bar::Bar() : Bar(std::make_index_sequence<array_sz>{}) { }

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|初始化|构造|函数|中|用户|定义|对象|成员|数组)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?