新手:关于初始化列表的C++问题

jbu*_*jbu 2 c++ arrays initialization object

假设我在标题中声明了一个对象数组.阵列的大小可能非常大.在我的源文件中,我为我的类创建了构造函数,我想初始化我的数组中的所有对象.如果没有使用零参数构造函数构造这些对象,我被告知这些需要放在我的初始化列表中.

我的问题是,如果我想使用一个循环来初始化这个可能很大的对象数组,那么它不会进入初始化列表,是吗?我不想放入我的初始化列表:str1("1"),str2("2"),...,strn("n").初始化所有这些对象的循环可以放在标题中还是可能放在构造函数的主体中?

请告诉我.我还没有看到这样的例子.

谢谢,jbu

Deu*_*uro 6

您无法循环初始化列表,但是在构造函数体中循环没有问题,只要对象类型具有有效的赋值运算符即可.首先使用零参数构造函数在构造函数体之前初始化数组中的对象.然后在身体中,您将重新分配给他们需要的任何东西.

另请注意,如果要使用相同的NON-zero参数构造函数初始化数组中的每个对象,则可以使用std :: vector类型,并在初始化列表中指定分配时要使用的默认非零构造函数内部数组,即:

// in .h

class MyClass
{
...
    MyClass();

private:

    vector<SomeObject> objects;
};

// in .cpp

MyClass::MyClass()
: objects(100,SomeObject(10, "somestring"))
{
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*imW 5

您将不得不等待C++ 0x初始化初始化列表中的数组.

struct S { 
    int a[3]; 
    S(int x, int y, int z) :a{x,y,z} { /*…*/ }; // solution to old problem 
};
Run Code Online (Sandbox Code Playgroud)