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