Maison > développement back-end > C++ > Comment puis-je initialiser un tableau d'objets en C sans constructeur public par défaut ?

Comment puis-je initialiser un tableau d'objets en C sans constructeur public par défaut ?

DDD
Libérer: 2024-12-26 01:57:09
original
293 Les gens l'ont consulté

How Can I Initialize an Object Array in C   Without a Public Default Constructor?

Initialisation d'un tableau d'objets sans constructeur par défaut

En C, lorsque l'on tente d'initialiser un tableau d'objets sans constructeur par défaut accessible au public, on rencontre une erreur comme illustré dans le extrait de code ci-dessous :

class Car
{
private:
  Car(){}; // Default constructor hidden
};

int main()
{
  Car *cars = new Car[10]; // Error: Default constructor not accessible
}
Copier après la connexion

Cette erreur se produit car le constructeur privé par défaut de Car ne peut pas être invoqué directement. Cependant, il existe une solution qui permet de créer un tel tableau sans rendre public le constructeur par défaut.

Solution : Placement-New

Placement-new est une technique qui permet de créer d'objets directement à un emplacement mémoire spécifié. Il peut être utilisé pour contourner les restrictions d'accessibilité du constructeur par défaut. Le code ci-dessous démontre son utilisation :

class Car
{
public:
  Car(int no) : _no(no) {}
};

int main()
{
  void *raw_memory = operator new[](NUM_CARS * sizeof(Car)); // Allocate raw memory
  Car *cars = static_cast<Car *>(raw_memory);
  // Initialize objects at specific memory locations
  for (int i = 0; i < NUM_CARS; ++i) {
    new(&amp;cars[i]) Car(i);
  }
}
Copier après la connexion

En utilisant placement-new, les objets peuvent être créés à l'emplacement mémoire alloué sans avoir besoin d'un constructeur public par défaut.

Conclusion

En utilisant placement-new, il devient possible d'initialiser des tableaux d'objets même lorsque le constructeur par défaut est privé. Cette technique offre une plus grande flexibilité et permet la création de tableaux d'objets complexes sans compromettre les principes d'encapsulation.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal