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

Wie initialisiere ich ein Array von Objekten ohne einen Standardkonstruktor in C?

Mary-Kate Olsen
Freigeben: 2024-12-22 20:52:24
Original
828 Leute haben es durchsucht

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

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

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!

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