Objektarray-Initialisierung ohne Standardkonstruktor
Beim Versuch, ein Array von Objekten zu initialisieren, denen ein Standardkonstruktor fehlt, stoßen Programmierer häufig auf den Fehler „ „X::X() ist in diesem Kontext privat“. Dieser Fehler tritt auf, weil der Standardkonstruktor normalerweise auf „privat“ eingestellt ist, um eine unbeabsichtigte Objekterstellung zu verhindern.
Eine Lösung besteht darin, „placement-new“ zu verwenden, einen Low-Level-C-Operator, der es ermöglicht, Objekte direkt in einen Block von zu konstruieren Erinnerung. Hier ist ein Beispiel:
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; }
Diese Technik bietet eine Möglichkeit, Arrays von Objekten zu initialisieren, ohne den Zugriffsspezifizierer des Konstruktors zu ändern. Es entspricht Best Practices, indem es unnötige Standardkonstruktoren vermeidet und gleichzeitig eine flexible und effiziente Objekterstellung ermöglicht.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein Array von Objekten ohne einen Standardkonstruktor in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!