Heim >Backend-Entwicklung >C++ >Wie kann ich ein Objektarray in C ohne einen öffentlichen Standardkonstruktor initialisieren?
In C stößt man beim Versuch, ein Array von Objekten ohne einen öffentlich zugänglichen Standardkonstruktor zu initialisieren, auf einen Fehler, wie im Beispiel dargestellt Codeausschnitt unten:
class Car { private: Car(){}; // Default constructor hidden }; int main() { Car *cars = new Car[10]; // Error: Default constructor not accessible }
Dieser Fehler tritt auf, weil der private Standardkonstruktor für Car nicht aufgerufen werden kann direkt. Es gibt jedoch eine Lösung, die die Erstellung eines solchen Arrays ermöglicht, ohne den Standardkonstruktor öffentlich zu machen.
Placement-new ist eine Technik, die die Erstellung ermöglicht von Objekten direkt an einem angegebenen Speicherort. Es kann verwendet werden, um die Barrierefreiheitsbeschränkungen des Standardkonstruktors zu umgehen. Der folgende Code demonstriert seine Verwendung:
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); } }
Durch die Verwendung von „placement-new“ können Objekte am zugewiesenen Speicherort erstellt werden, ohne dass ein öffentlicher Standardkonstruktor erforderlich ist.
Durch die Verwendung von „placement-new“ wird es möglich, Arrays von Objekten zu initialisieren, selbst wenn der Standardkonstruktor privat ist. Diese Technik bietet mehr Flexibilität und ermöglicht die Erstellung komplexer Objektarrays, ohne die Kapselungsprinzipien zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Objektarray in C ohne einen öffentlichen Standardkonstruktor initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!