Auto_ptr problem
-
Hallo,
ich habe ein problem mit den Auto-Pointern
auto-ptr, shared_ptr, usw.Ich habe diese noch nie benutzt, und weiss nun nicht wirklich welcher
für meine konktrete Anwendung der richtige//beste ist.Mein Problem ist :
Ich habe ziemlich grosse Datenstrukturen, welche in Stacks "umherwandern"
können, bisher kopiere ich diese immer, was ziemlich in-effizient ist.
Ich würde nun gerne, die ganzen Strukturen immer nur über ihren pointer
umherschieben (weil keine Struktur 2mal in verschiedenen stacks sein kann)Ich bräuchte also einen Pointer welcher "moveable" ist.
shared_ptr sind ja eher fürs kopieren, auto-ptr kann man nicht kopieren,
also auch nicht verschieben, hat wer eine idee?
-
shared_ptr wäre doch in Ordnung. Solange das Objekt die Stacks
abläuft bleibt es erhalten, danach wird es automatisch freigegeben.
Und kopiert wird ja nur der shared_ptr nicht das Objekt selbst...
-
Schau dir mal die boost::ptr_container Library an.
Da kannst du Pointer in einem STL konformen Container verwalten.
Und du kannst die Pointer auch wieder freigeben, um sie z.B. in einen anderen Container zu schieben.http://www.boost.org/doc/libs/1_35_0/libs/ptr_container/doc/ptr_container.html
-
Pointer-Problem schrieb:
ich habe ein problem mit den Auto-Pointern
auto-ptr, shared_ptr, usw.auto_ptr würde ich erstmal nicht mehr verwenden.
boost::scoped_ptr ist für ich sag mal "lokale" Datenhaltung (Keine Kopie...).
boost::shared_ptr ist auch für Container etc. geeignet, kann kopiert werden und die Letzte Intanz löscht den Inhalt.Pointer-Problem schrieb:
Ich habe ziemlich grosse Datenstrukturen, welche in Stacks "umherwandern" können, bisher kopiere ich diese immer, was ziemlich in-effizient ist.
Grundsätzlich sind alle Formen von Smartpointern nicht für den Stack (Wenn du den Speicherbereich nicht Container meinst), sondern für die Speicherverwaltung von Elementen auf dem Heap gedacht. Wenn du aber Container meinst, so ist shared_ptr die richtige Wahl.
Pointer-Problem schrieb:
Ich bräuchte also einen Pointer welcher "moveable" ist.
Ich nehme einfach mal an das du dich Missverständlich ausdrückst. Keiner der Smartpointer ist "moveable" im Sinne das der Speicher auf den er verweist hin und her geschoben wird, aber shared_ptr ist kopierbar (und die Kopie verweist auf den gleichen Speicherbereich).
Pointer-Problem schrieb:
shared_ptr sind ja eher fürs kopieren, auto-ptr kann man nicht kopieren, also auch nicht verschieben, hat wer eine idee?
Wie gesagt verschieben gibt es garkeinen. Ich nehme aber sehr stark an das hier einfach Begriffe durcheinander geworfen werden.
cu André
-
ok, dann werde ich mal versuchen, das ganze mit shared_ptr zu programmieren.
Mit verschieben meinte ich :
"von einem std::stack in einen anderen std::stack"was ja heisst : im neuem stack konstruieren, im alten stack destruieren.
Und das ist in diesem fall extrem aufwendig.
Ich denke nun habe ich alle zweideutigkeiten aufgelöst

-
Pointer-Problem schrieb:
...
was ja heisst : im neuem stack konstruieren, im alten stack destruieren.
...In Deinen Stacks solltest Du nur shared_ptr halten.
Wenn Du einen shared_ptr von einem Stack in den anderen schiebst, dann
wird das Objekt, welches vom shared_ptr verwaltet wird nicht kopiert,
nur der shared_ptr selber, was aber nicht allzu aufwendig ist.
-
Von welchem Stack redest du überhaupt?
-
Pointer-Problem schrieb:
Ich bräuchte also einen Pointer welcher "moveable" ist.
shared_ptr sind ja eher fürs kopieren, auto-ptr kann man nicht kopieren,
also auch nicht verschieben, hat wer eine idee?Da die STL (noch) keine "movable types" kennt brauchst du einen Pointer der kopierbar ist. Wie du selbst schon geschrieben hast ist shared_ptr kopierbar -> Problem gelöst
