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

Comment initialiser un tableau d'objets sans constructeur par défaut en C ?

Mary-Kate Olsen
Libérer: 2024-12-22 20:52:24
original
908 Les gens l'ont consulté

How to Initialize an Array of Objects Without a Default Constructor in C  ?

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

Lorsqu'ils tentent d'initialiser un tableau d'objets dépourvus de constructeur par défaut, les programmeurs rencontrent souvent l'erreur " X::X() est privé dans ce contexte". Cette erreur se produit car le constructeur par défaut est généralement défini sur private pour empêcher la création involontaire d'objets.

Une solution consiste à utiliser placement-new, un opérateur C de bas niveau qui permet de construire des objets directement dans un bloc de mémoire. Voici un exemple :

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

int main()
{
    int userInput = 10;
    void *rawMemory = operator new[](userInput * sizeof(Car)); // Allocate raw memory
    Car *myCars = static_cast<Car *>(rawMemory); // Cast to Car *

    for (int i = 0; i < userInput; ++i)
    {
        new(&myCars[i]) Car(i); // Construct Car objects in-place using placement-new
    }

    // Destruct objects in reverse order
    for (int i = userInput - 1; i >= 0; --i)
    {
        myCars[i].~Car(); // Destroy the object using placement-delete
    }

    operator delete[](rawMemory); // Release raw memory

    return 0;
}
Copier après la connexion

Cette technique permet d'initialiser des tableaux d'objets sans modifier le spécificateur d'accès du constructeur. Il adhère aux meilleures pratiques en évitant les constructeurs par défaut inutiles tout en permettant une création d'objets flexible et efficace.

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