Maison >développement back-end >C++ >Comment initialiser un tableau d'objets en C sans constructeur par défaut ?
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(&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!