new/delete[] in Klassen Constructor/Destructor
-
Hallo ich habe noch relativ wenig Erfahrung mit C++ und den Klassen.
Ich habe in einem Programm folgendes.
typedef struct { Uint8 character; Uint8 color; }RainLineItem; class RainLine { public: // constructor RainLine(); // destructor ~RainLine(); int x; int y; int speed; int length; RainLineItem *items; }; // constructor of RainLine Class RainLine::RainLine() : items(NULL) { length = 10+rand()%16; speed = 1+rand()%3; y = rand()%200; items = new RainLineItem[length]; } // destructor of RainLine Class RainLine::~RainLine() { // do nothing; } BeispielFunktion(RainLine *Line) { // do something with Line }in der main funktion wird ein array mit mehreren Instanzen von RainLine erstellt und an die Funktion übergeben.
... ... RainLine *Lines1 = NULL; ... ... Lines1 = new RainLine[num_lines1]; ... ... BeispielFunktion(Lines1) ... ... delete [] Lines1 ... ...Das funktioniert auch, aber müsste in den Destructor nicht noch ein "delete[] items"?
Wenn ich das rein packe, beendet das Programm allerdings mit code 0x03.Ist das so richtig wie ich es jetzt habe?
-
Regel der großen Drei missachtet.
Warum nicht std::vector? Und zwar überall, wo du new benutzt.
-
Hm, ich habe erst vor kurzem mit c++ angefangen, vorher nur c ...
Mit std::vector habe ich mich bislang noch nicht befasst.

Die großen drei sind doch gleich welche?
-
Destruktor, Kopierkonstruktor und Zuweisungsoperator. Seit C++11 auch Move-Zuweisung und Move-Konstruktion. Hiervon rede ich:
http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)
-
Ah danke, ja davon hatte ich noch nichts gehört bis jetzt.
-
engitiny schrieb:
Ah danke, ja davon hatte ich noch nichts gehört bis jetzt.
Auch wenn's nützlich ist und du später davon hören musst (weil es ein Teil einer immens wichtigen Technik in C++ ist): std::vector ist erst einmal dringender zum Angucken. Der macht das intern bereits korrekt. Ebenso alle anderen Container der Standardbibliothek. Dadurch musst du dich dann selber um nichts mehr kümmern. Aber nun kennst du wenigstens schon die Grundzüge, wie diese Container im Inneren funktionieren. Es ist immer eine feine Sache ist, wenn man weiß, wie etwas funktioniert, wenn man es benutzt.