Heim > Backend-Entwicklung > C++ > Wie initialisiere ich ein Objektarray in C ohne einen Standardkonstruktor?

Wie initialisiere ich ein Objektarray in C ohne einen Standardkonstruktor?

Susan Sarandon
Freigeben: 2024-12-22 11:02:10
Original
797 Leute haben es durchsucht

How to Initialize an Object Array in C   Without a Default Constructor?

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(&amp;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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage