Home  >  Article  >  Backend Development  >  How to Properly Initialize Arrays of Objects in C ?

How to Properly Initialize Arrays of Objects in C ?

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 01:53:02309browse

How to Properly Initialize Arrays of Objects in C  ?

How to Initialize Arrays of Objects in C

In C , initializing an array of objects may seem straightforward, but there are some intricacies to consider. Consider the following struct and class definitions:

struct Foo {
  Foo(int x) { /* ... */ }
};

struct Bar {
  Foo foo;

  Bar() : foo(4) {}  // Valid initialization
};

struct Baz {
  Foo foo[3];

  // Incorrect initialization
  Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};

The initialization of Bar using foo(4) is valid since it invokes the constructor of Foo to initialize the foo member. However, the attempt to initialize Baz in the provided way is incorrect.

Correct Array Initialization

Unlike Bar, where there is a single object of type Foo, Baz contains three objects of the same type. To properly initialize the array of objects in Baz, the following approach must be taken:

Baz() {
  foo[0] = Foo(4);
  foo[1] = Foo(5);
  foo[2] = Foo(6);
}

This explicitly calls the constructor for each object in the array.

Workaround for Embedded Processors

In the absence of standard library constructs like std::vector, an alternative approach is to utilize a default constructor along with an explicit initialization method, such as init(), allowing you to defer initialization until after construction:

Baz() {}

void Baz::init() {
  foo[0] = Foo(4);
  foo[1] = Foo(5);
  foo[2] = Foo(6);
}

The above is the detailed content of How to Properly Initialize Arrays of Objects in C ?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn