Pointer in einem vector?
-
Es sind numerische Methoden die ein Echtzeit-Netzwerk simulieren.
Am Ende wird ein Binary ausgespuckt mit dem Ergebnis (schöner bunter Film von Kanten und Knoten). Sind die Parameter falsch bzw. zu beanspruchend kann das Netz keine Echtzeit liefern. Die Simulation stoppt.
Je nach Genauigkeit und Parameter wird ein Einzelergebnis (sowas wie eine 1/25 Sek. (ein Bild) in einem Film) riesig oder aber auch null. Bei Erfolg wird so ein "Bild" gespeichert und über Nacht ein "Film" raus.
-
Die Klasse hat immer eine berechenbare Größe. Wenn Deine Klasse "von ganz klein bis ganz gross" werden kann, dann doch sowieso nur über dynamische Elemente. Was für die o.a. Fragestellung gilt, ist aber einzig die statische Größe.
Wenn Du Ableitungen der Klasse im Vector speichern willst, kommt die Version mit Objekten im Vector sowieso nicht in Frage, da nur Referenzen und Zeiger (oder zeigerähnliche Konstrukte) virtuelle Aufrufe ermöglichen.
-
Was den Stil angeht, sollte man Pointer vermeiden, wenn sie nicht unbedingt notwendig sind.
-
goran schrieb:
Hallo,
kurze Frage, was ist besser?
Weder noch.
Besser ist in (nahezu) jedem Fallvector<MyClass_t> itsVector;ODER
vector<MyClass_t * > itsVector;
und hierbei würde ich die erste Variante als Default vorziehen und nur in definierten Ausnahmefällen (Laufzeitpolymorphie vonnöten, unkopierbare Typen, nachgewiesener Speicherplatzmangel, ..) auf Zweitere ausweichen.
Gruß,
Simon2.
-
goran schrieb:
Es sind numerische Methoden die ein Echtzeit-Netzwerk simulieren.
Am Ende wird ein Binary ausgespuckt mit dem Ergebnis (schöner bunter Film von Kanten und Knoten). Sind die Parameter falsch bzw. zu beanspruchend kann das Netz keine Echtzeit liefern. Die Simulation stoppt.
Je nach Genauigkeit und Parameter wird ein Einzelergebnis (sowas wie eine 1/25 Sek. (ein Bild) in einem Film) riesig oder aber auch null. Bei Erfolg wird so ein "Bild" gespeichert und über Nacht ein "Film" raus.
Spricht irgendwas dagegen, einen Teil des Films früher zu speichern, dann wird es nicht beliebig groß. oder muss man alles auf einmal speichern?
-
LordJaxom schrieb:
Die Klasse hat immer eine berechenbare Größe. Wenn Deine Klasse "von ganz klein bis ganz gross" werden kann, dann doch sowieso nur über dynamische Elemente. Was für die o.a. Fragestellung gilt, ist aber einzig die statische Größe.
Ist imho Quatsch, natürlich wird beim Einfügen in den Vektor dann kopiert und mit geeignetem CopyCTor zählt da sehrwohl die dyanmische Größe.
Simon2 schrieb:
und hierbei würde ich die erste Variante als Default vorziehen und nur in definierten Ausnahmefällen (Laufzeitpolymorphie vonnöten, unkopierbare Typen, nachgewiesener Speicherplatzmangel, ..) auf Zweitere ausweichen.
Sollten die Objekte groß sein und oft kopiert werden müssen spricht imho auch sehr viel für Variante 2.
Ich würde mir eher um Alternativen Gedanken machen, siehe Posting "uber". Das gefällt schon sehr gut. Blockweise den Film speichern.
MfG SideWinder
-
SideWinder schrieb:
...
Simon2 schrieb:
und hierbei würde ich die erste Variante als Default vorziehen und nur in definierten Ausnahmefällen (Laufzeitpolymorphie vonnöten, unkopierbare Typen, nachgewiesener Speicherplatzmangel, ..) auf Zweitere ausweichen.
Sollten die Objekte groß sein und oft kopiert werden müssen spricht imho auch sehr viel für Variante 2....
=>
Simon2 schrieb:
...in definierten Ausnahmefällen (...nachgewiesener Speicherplatzmangel, ..) auf Zweitere ausweichen.
Gruß,
Simon2.
-
SideWinder schrieb:
LordJaxom schrieb:
Die Klasse hat immer eine berechenbare Größe. Wenn Deine Klasse "von ganz klein bis ganz gross" werden kann, dann doch sowieso nur über dynamische Elemente. Was für die o.a. Fragestellung gilt, ist aber einzig die statische Größe.
Ist imho Quatsch, natürlich wird beim Einfügen in den Vektor dann kopiert und mit geeignetem CopyCTor zählt da sehrwohl die dyanmische Größe.
Ist natürlich richtig. Dem könnte man durch lazy copying oder shared data beikommen. Das finde ich letztendlich besser, als sich nur aufgrund der "Kopierphobie" die Zeiger ans Bein zu binden

Dank boost gibt's dann auch noch Alternativen, die einem die Speicherverwaltung abnehmen: shared_array (im Vector) oder ptr_vector z.B..
-
Irgendwie verteufelt ihr mir die Zeiger zu Arg.
Ich mein einen einfachen simplem Zeiger zu haben, anstatt tonnen von bytes umherzukopieren, oder durch irgendwelche versteckte zeiger, die in irgendwelchen anderen konstrukten umhergammeln, darf doch nicht so böse sein oder?Ein zeiger ist ein tolles hilfsmittel, mit dem man nichts falschmachen kann, solange man weiß, was man tut. Und ich hoffe, das kann jemand, der irgendwelche netzwerksimulation mit tonnen von daten in filme packt, oder etwa nicht?
(das ganze soll jetzt auch nicht als vorwurf, oder negativ gelten. gell)
-
Das hat nichts mit Verteufelung zu tun, es ist imho einfach das Risiko gegeben, bei einem pop_back, erase, clear oder im Destruktor der den vector enthaltenden Klasse ein (oder viele) delete zu vergessen. Deshalb habe ich in solchen Containern (wenn Zeiger nötig sind) immer Objekte, die den Zeiger verwalten. Um das zu erreichen, reicht bereits ein ptr_vector (boost) oder ein vector< shared_ptr > (inzwischen sogar Standard) aus.
-
LordJaxom schrieb:
...Deshalb ...
... oder nutze eben defaultmäßig "Container mit Objekten".

(stimme Dir 100% zu)Für mich hat ein "Zeiger" eine bestimmte semantische Aussage: Es ist ein "Verweis" ... und es besteht für mich schon ein Unterschied, ob ich einen "Container von Objekten" oder einen "Container von Verweisen" habe - und in den allermeisten Fällen brauche ich Ersteres.
Gruß,
Simon2.