Heim >Backend-Entwicklung >C++ >Wie kann ich ein Objektarray in C ohne einen öffentlichen Standardkonstruktor initialisieren?

Wie kann ich ein Objektarray in C ohne einen öffentlichen Standardkonstruktor initialisieren?

DDD
DDDOriginal
2024-12-26 01:57:09271Durchsuche

How Can I Initialize an Object Array in C   Without a Public Default Constructor?

Objekt-Array-Initialisierung ohne Standardkonstruktor

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.

Lösung: Placement-New

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(&amp;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.

Fazit

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!

Stellungnahme:
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