Dynamische Arrays mit ...
-
std::vector wäre imo am besten geeignet.
basic macht intern sicher etwas ähnliches. "magische" funktionen gibt es nicht
-
Original erstellt von <TS>:
jo wenn c(++) sowas (automatisches) hätte, dann müsste ich nix faken... egal...vector, list,...
aber auch smartpointeres gibt vieles in C++, aber du kannst nix 1:1 von einer anderen sprache übernehmen... das geht einfach nicht!
(sonst würden ja alle in basic programmieren und dann nach C++ konvertieren lassen :p)
-
ja da gibt es schon was - nur ich möchte unbedingt dass es automatisch gelöscht wird - sonst kann ich ja statt vector auch normale speicherfunktionen von C nehmen...
-
Hi!
Der Vector entfernt seine Elemente automatisch.
class MyClass
{
[...]
}foo()
{
std::vector<MyClass> test;} // Lebensende von test
Jedes MyClass element würde gelöscht. Destruktur aufgeurfen etc.
foo()
{
std::vector<MyClass *> test;
}Hier ist das Element ein Zeiger. Dieser wird gelöscht. Der Speicher auf den der Zeiger zeigt wird NICHT gelöscht.
Nun läge es nahe eine Klasse zu schreiben die das übernimmt.
Diese soll den Speicher anlegen bzw. den angelegten Speicher entgegen nehmen, ihn halten. Beim zerstören dieser Klasse könnte man den Speicher der gehalten wird zerstören.Dieses bieten Dir die oben angsprochenen auto_ptr .
Lies dich da dann aber ein, beim Zuweisen wird der "Besitz" des Speichers gewechselt. Alternativ könntest Du hier dann auch referenzzählung machen.
Das Redim bekommst Du also leider nicht ohne Arbeit hin.
Mit a.at(index) kannst Du prüfen lassen ob der index legal ist mit dem zugegriffen wird.
Alles das müsstest Du selbst implementieren....
[ Dieser Beitrag wurde am 25.04.2003 um 19:11 Uhr von Knuddlbaer editiert. ]
[ Dieser Beitrag wurde am 25.04.2003 um 19:12 Uhr von Knuddlbaer editiert. ]
-
So habe was ausprobiert - das scheint zu gehen:
#include <iostream.h> #include <stdlib.h> class vector { public: int *data; int size; vector(int index) { size=index; data=new int[index]; }; ~vector() { delete[] data; }; int operator[](int index) { return data[index]; }; int getsize() { return size; }; }; int test() { vector v(100); } int main() { system("PAUSE"); for(int i=1;i<=50000;++i) { test(); //50.000 Aufrufe X 100 Elemente X 4 = 20.000.000 Bytes //Systemmonitor zeigt keine Speicherverluste - OK! } system("PAUSE"); };
Danke Leute - Es ist zwar nicht ganz was ich wollte - aber das geht schon mal...
-
Nach Funktionsdefinitionen brauchst Du kein Semikolon und außerdem meinten wir eigentlich std::vector, der ist um einiges praktischer.