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
Libérer: 2024-11-07 01:53:02
original
391 Les gens l'ont consulté

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) {}
};
Copier après la connexion

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);
}
Copier après la connexion

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal