vector
-
hallo ich habe einen vector<basis*>v
wenn ich nun ein item ablege
v.push_back(new basis)
muss ich für dieses auch delete anwendenund wenn ja wie sieht der korrekte aufruf aus?
-
Ja, für jedes
newbrauchst du ein entsprechendesdelete.Du musst halt vor der Entfernung des Elements
delete v[i];(je nachdem halt, hier per Index) schreiben.
-
delete v[i]; //bzw. delete[] v[i];
-
Skym0sh0 schrieb:
//bzw. delete[] v[i];Ist hier irrelevant, da er sein Objekt mit
new basisangelegt hat. Die Version mit den []-Klammern ist nur bei Arrays notwendig. Nur, um ihn nicht zu verwirren...
-
nene sehr interessant
würde mir delete[] den gesamten vector freimachen?
oder wäre das wenn ich im vector ein array oder die addresse von einem gespeichert hätte?suche nach einer möglichkeit meinen vectro möglichst schnell von den elementen befreien zu können
imo mach ich alles mit for schleifengibts in c++ auch solche schleifen wie in java for(e ...)?
-
muss ich jede funktion die evt überschrieben werden könnte als virtual deklarieren?
-
gasst schrieb:
nene sehr interessant
würde mir delete[] den gesamten vector freimachen?
Eben nicht, deshalb ja hier irrelevant.

gasst schrieb:
oder wäre das wenn ich im vector ein array oder die addresse von einem gespeichert hätte?
Ja, wenn ein Element ein Zeiger auf ein mit
new[]dynamisch allokiertes Array ist, musst du den Speicherbereich mitdelete[]freigeben. Allerdings wird das kaum je vorkommen...gasst schrieb:
suche nach einer möglichkeit meinen vectro möglichst schnell von den elementen befreien zu können
imo mach ich alles mit for schleifenDu weisst aber schon, dass
std::vectordazu konzipiert wurde, komfortabel dynamische Arrays handzuhaben, indem dir die Speicherverwaltung abgenommen wird und Methoden für den Zugriff bereitgestellt werden? Wieso speicherst du Zeiger und keine Objekte? Brauchst du polymorphes Verhalten?
-
leider brauch ich das
habe ne klasse object
von der sich alle meine figuren im spiel ableiten
damit der mir nicht einfach alles auf die basisklasse reduziert
brauch ich zeigervlt wärs sinnvoll mir mal die boost klassen anzuschaun aber hab keine ziet dafür ^^
nun die frage mit dem muss zeiger sein wäre beantwortet...
arrays sind mir da noch komplizierter denk ich
-
Du kannst auch Smart Pointer benutzen, dann wird dir das manuelle delete erspart.
-
smart pointer??
was ist das? wier verwende ich es ?
-
gasst schrieb:
vlt wärs sinnvoll mir mal die boost klassen anzuschaun aber hab keine ziet dafür ^^
Naja, die sind in dieser Hinsicht halt schon konfortabler. Das Interface ist fast identisch mit den STL-Containern.
gasst schrieb:
smart pointer??
was ist das? wier verwende ich es ?
Das sind "schlaue Zeiger", die den angeforderten Speicherbereich automatisch freigeben, wenn er nicht mehr gebraucht wird. Die Smart-Pointer sind entweder in Boost oder in deiner TR1-Implementierung der Standardbibliothek vorhanden.
-
Nexus schrieb:
gasst schrieb:
vlt wärs sinnvoll mir mal die boost klassen anzuschaun aber hab keine ziet dafür ^^
Naja, die sind in dieser Hinsicht halt schon konfortabler. Das Interface ist fast identisch mit den STL-Containern.
Ich würde es garnicht erst beantworten. Er hat ja schon keine Zeit zum Lesen, dann braucht man es auch nicht vorzukauen
