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 }
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.
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(&cars[i]) Car(i); } }
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.
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!