Maison >développement back-end >C++ >Comment initialiser correctement des tableaux d'objets en C ?

Comment initialiser correctement des tableaux d'objets en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-07 01:53:02375parcourir

How to Properly Initialize Arrays of Objects in C  ?

Comment initialiser des tableaux d'objets en C

En C, initialiser un tableau d'objets peut sembler simple, mais il y a quelques subtilités à résoudre considérer. Considérez les définitions de structure et de classe suivantes :

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) {}
};

L'initialisation de Bar à l'aide de foo(4) est valide car elle invoque le constructeur de Foo pour initialiser le membre foo. Cependant, la tentative d'initialisation de Baz de la manière fournie est incorrecte.

Corriger l'initialisation du tableau

Contrairement à Bar, où il existe un seul objet de type Foo, Baz contient trois objets du même type. Pour initialiser correctement le tableau d'objets dans Baz, l'approche suivante doit être adoptée :

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

Cela appelle explicitement le constructeur pour chaque objet du tableau.

Solution de contournement pour Embedded Processeurs

En l'absence de constructions de bibliothèque standard telles que std :: vector, une approche alternative consiste à utiliser un constructeur par défaut ainsi qu'une méthode d'initialisation explicite, telle que init(), vous permettant de différer l'initialisation jusqu'après la construction :

Baz() {}

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn