Dynamisches Zuweisen eines Arrays von Objekten
Bei der Arbeit mit Objekten, die dynamisch zugewiesene Arrays enthalten, kann das Erstellen eines gesamten Arrays dieser Objekte eine Herausforderung darstellen . Die Verwendung eines einfachen Ansatzes wie:
A* arrayOfAs = new A[5]; for (int i = 0; i < 5; ++i) { arrayOfAs[i] = A(3); }
führt zu Speicherproblemen, da die in der Schleife zerstörten A-Objekte ihre internen myArray-Arrays löschen, wodurch die Array-Elemente von arrayOfAs ungültig werden.
Um diese zu vermeiden Bei Problemen ist das Verständnis der „4er-Regel“ (oder der erweiterten „5er-Regel“ in C 11) für Klassen, die Raw enthalten, von entscheidender Bedeutung Zeiger:
Wenn nicht definiert, generiert der Compiler seine eigenen Versionen dieser Methoden, die möglicherweise nicht für Rohzeiger geeignet sind.
Um den oben genannten Fehler zu beheben, gelten die Mindestanforderungen für Zu einer Klasse, die einen Zeiger auf ein Array enthält, gehören:
class A { size_t mSize; int* mArray; public: A(size_t s = 0) {mSize=s;mArray = new int[mSize];} ~A() {delete [] mArray;} A(A const& copy) { mSize = copy.mSize; mArray = new int[copy.mSize]; // Handle copying of integers/other members } A& operator=(A other) { std::swap(mArray, other.mArray); std::swap(mSize, other.mSize); return *this; } };
Alternativ kann die Verwendung von Standardcontainern wie std::vector den Prozess vereinfachen, da sie den Speicher verwalten Verwaltung automatisch:
class A { std::vector<int> mArray; public: A(){} A(size_t s) :mArray(s) {} };
Das obige ist der detaillierte Inhalt vonWie vermeide ich Speicherprobleme beim dynamischen Zuweisen eines Arrays von Objekten in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!