Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

newbie: C++ question about initialization lists

Let's say I have an array of objects declared in my header. The size of the array could be very large. In my source file, I create the constructor for my class and I'd like to initialize all the objects in my array. If these objects are not being constructed with a zero-parameter constructor, I am told these need to be put in my initialization list.

My question is if I want to use a loop to initialize this possibly large array of objects, that wouldn't go in the initialization list, would it? I wouldn't want to put in my initialization list: str1("1"), str2("2"), ... , strn("n"). Could a loop to initialize all these objects go in the header or possibly in the body of the constructor?

Please let me know. I have not seen an example of this.

Thanks, jbu

like image 633
jbu Avatar asked Aug 28 '26 02:08

jbu


1 Answers

You are not able to loop in an initializer list, however there is no issue with looping in the constructor body, so long as the object type has a valid assignment operator. The objects in the array will be first initialized using their zero-parameter constructor, before the constructor body. Then in the body you will re-assign them to whatever they need to be.

Also note that if each object in the array is to be initialized using the same NON-zero parameter constructor, you can use an std::vector type, and in the initializer list, specify the default non-zero constructor to be used when allocating the internal array, ie:

// in .h

class MyClass
{
...
    MyClass();

private:

    vector<SomeObject> objects;
};

// in .cpp

MyClass::MyClass()
: objects(100,SomeObject(10, "somestring"))
{
}
like image 199
DeusAduro Avatar answered Aug 30 '26 14:08

DeusAduro



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!