Objekt-Array-Initialisierung ohne Standardkonstruktor
In C wird beim Erstellen eines Arrays von Objekten der Standardkonstruktor aufgerufen, um jedes Element zu initialisieren. In einigen Fällen kann es jedoch zu einem Fehler bei der Initialisierung eines Arrays von Objekten kommen, wenn der Standardkonstruktor privat ist oder nicht existiert.
Um dies zu umgehen, können Sie die Technik der Platzierung-neu verwenden, die bietet eine Möglichkeit, Objekte in situ zu initialisieren, ohne den Standardkonstruktor aufzurufen.
So können Sie Placement-New verwenden, um ein Array von Objekten ohne Standard zu initialisieren Konstruktor:
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; }
In diesem Code stellt raw_memory den Rohspeicherblock dar, der zum Speichern des Arrays von Car-Objekten verwendet wird. Anschließend wandeln wir es in einen Car *-Zeiger um und verwenden „placement-new“, um jedes Objekt an Ort und Stelle zu konstruieren und es mit der angegebenen Nummer zu initialisieren.
Wenn Sie mit dem Array fertig sind, denken Sie daran, die Objekte in umgekehrter Reihenfolge zu zerstören Ordnen und löschen Sie den mit „placement-new“ zugewiesenen Rohspeicher. Mit diesem Ansatz können Sie ein Array von Objekten initialisieren, auch wenn auf deren Standardkonstruktor nicht zugegriffen werden kann.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein Objektarray in C ohne einen Standardkonstruktor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!