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

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

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 11:02:10798parcourir

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

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

En C , lors de la création d'un tableau d'objets, le constructeur par défaut est appelé pour initialiser chaque élément. Cependant, dans certains cas, vous pouvez rencontrer une erreur lors de l'initialisation d'un tableau d'objets si le constructeur par défaut est privé ou n'existe pas.

Pour surmonter cela, vous pouvez utiliser la technique du placement-new, qui fournit un moyen d'initialiser des objets in situ, sans invoquer le constructeur par défaut.

Voici comment utiliser placement-new pour initialiser un tableau d'objets sans valeur par défaut. constructeur :

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

int main() {
    void *raw_memory = operator new[](NUM_CARS * sizeof(Car));
    Car *ptr = static_cast<Car *>(raw_memory);
    for (int i = 0; i < NUM_CARS; ++i) {
        new(&amp;ptr[i]) Car(i);
    }

    // destruct in inverse order
    for (int i = NUM_CARS - 1; i >= 0; --i) {
        ptr[i].~Car();
    }
    operator delete[](raw_memory);

    return 0;
}

Dans ce code, raw_memory représente le bloc de mémoire brute utilisé pour stocker le tableau d'objets Car. Nous le convertissons ensuite en un pointeur Car * et utilisons placement-new pour construire chaque objet sur place, en l'initialisant avec le numéro spécifié.

Lorsque vous avez terminé avec le tableau, n'oubliez pas de détruire les objets à l'envers. ordonner et supprimer la mémoire brute allouée à l’aide de placement-new. Cette approche permet d'initialiser un tableau d'objets même si leur constructeur par défaut est inaccessible.

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