Smart Pointer ohne Boost?
-
Hey leute sorry, das ist schon der 6 Beitrag heute..:) Aber muss sein...
Ich will objekte in eine zeiger liste
std::list<Dummy*> LIST;anlegen.. wenn ich nun statt eines normalen zeigers eine smart pointer verwenden will, müssete das objekt ja quaise nach auskettung des elements automatisch gelöscht werden oder?
Gib es spmartpointer in der stl oder sollte ich boost verwenden?
Sollte mich allg. mal mit Boost befassen oder?
-
ja mit boost befassen wäre nciht schlecht... da is vieles was man gut benutzen kann und einem die arbeit erleichtert.
zu den pointer: std::auto_ptr gibts glaub ich noch. Aber wie der is, kA
-
auto_ptr könnte für deine Zwecke funktionieren. Allerdings hat er ein etwas "anderes" Kopierverhalten.

Edit: Verdammt... Der funktioniert ja garnicht in STL Containern!

Edit2: Ja... wie CStoll schon gesagt hat!
-
In der STL gibt es nur einen Smart-Pointer - der bereits erwähnte std::auot_ptr<>. Aber der ist nicht kompatibel mit den STL-Containern (wegen der unpassenden Kopier-Semantik). Für deine Zwecke könntest du boost::shared_ptr<> verwenden (oder nachbauen).
-
ok gut.. dann sollte ich mich mit boost smart pointer befassen...
Nun ist die frage wie binde ich das boost gedönst in mein projekt ein?
-
Je nachdem welchen Zeigertyp du verwenden willst:
#include <boost/scoped_ptr.hpp> #include <boost/scoped_array.hpp> #include <boost/shared_ptr.hpp> #include <boost/shared_array.hpp>Und vorher halt installieren!
Siehe: http://www.kharchi.de/Boost_Installation.html
-
Da die Smartpointer Templates sind, muß man Boost nicht zwingend "installieren". Es reicht, wenn man seinem Compiler die Pfade bekannt gibt. Weiterhin kann man empfehlen den std::tr1::shared_ptr zu benutzen, der ist bei Boost 1.34.0 dabei. Man muß dann allerdings <memory> inkludieren... wenn ich mich nicht täusche.
-
Schon mal was von Doku lesen gehört? Du hast doch Diplom, da sollte man sowas doch echt mal erwarten können...
-
Artchi schrieb:
Da die Smartpointer Templates sind, muß man Boost nicht zwingend "installieren". Es reicht, wenn man seinem Compiler die Pfade bekannt gibt.
Eben. Ich habe z.B. Boost auch noch nie installiert, weil auf meinem alten PC der Festplattenplatz dazu nicht gereicht hat (die fertige Installation braucht nur ca. 512 MiB, aber während der Installation werden AFAIR ca. 2 GiB belegt).
-
Konrad Rudolph schrieb:
Artchi schrieb:
Da die Smartpointer Templates sind, muß man Boost nicht zwingend "installieren". Es reicht, wenn man seinem Compiler die Pfade bekannt gibt.
Eben. Ich habe z.B. Boost auch noch nie installiert, weil auf meinem alten PC der Festplattenplatz dazu nicht gereicht hat (die fertige Installation braucht nur ca. 512 MiB, aber während der Installation werden AFAIR ca. 2 GiB belegt).
Das kann man so pauschal nicht sagen, meine komplette boost Installation belegt 650MiB. Kommt halt ganz darauf an wieviele Versionen der Bibliotheken man sich erstellen lässt.
Ein Boost Installer für Visual C++
http://boost-consulting.com/products/free
-
lolz schrieb:
Das kann man so pauschal nicht sagen, meine komplette boost Installation belegt 650MiB. Kommt halt ganz darauf an wieviele Versionen der Bibliotheken man sich erstellen lässt.
Na gut. Aber ich habe z.B. nur gegen ein Toolset kompilieren lassen und da hat es eben ca. 2 GiB gebraucht. Mag sein, dass es bei mehreren Toolsets sogar noch mehr wird.
-
Konrad Rudolph schrieb:
lolz schrieb:
Das kann man so pauschal nicht sagen, meine komplette boost Installation belegt 650MiB. Kommt halt ganz darauf an wieviele Versionen der Bibliotheken man sich erstellen lässt.
Na gut. Aber ich habe z.B. nur gegen ein Toolset kompilieren lassen und da hat es eben ca. 2 GiB gebraucht. Mag sein, dass es bei mehreren Toolsets sogar noch mehr wird.
Das liegt aber nicht an boost, sondern daran, dass der Compiler und der Linker bei jedem Vorgang temporäre Dateien erzeugt, der VC erzeugt außerdem noch die PDB und ne Export Datei.
Ich kann jetzt nicht mehr sagen, ob die Dateien nach jedem Build direkt gelöscht wurden, oder ob das erst danach gemacht wurde. Zumindest bei dir scheint es erst am Ende gemacht worden zu sein.
-
lolz schrieb:
Das liegt aber nicht an boost, sondern daran, dass der Compiler und der Linker bei jedem Vorgang temporäre Dateien erzeugt
Ja, das ist mir durchaus klar. Ändert aber nichts daran, dass das für meine Festplatte damals zuviel war.

-
Bei meinen Borland-Compilern (BCB5 - BCB2007) sind es zwischen 350 und 450 MB. Bei MinGW sind es 1,4GB. Bei Borland ist es weniger, weil da nicht alle Libs mitkompiliert wurden. Insbesondere die recht großen Wave, Graph und Python fehlen da.
-
Und genau aus diesem Grund sollte man die Boost Libraries meiden.
-
meid schrieb:
Und genau aus diesem Grund sollte man die Boost Libraries meiden.
So ein Ochsenstuhl.
/EDIT: Hab das hässliche Wort "Schwachsinn" ersetzt.
-
meid schrieb:
Und genau aus diesem Grund sollte man die Boost Libraries meiden.
Richtig.

-
meid schrieb:
Und genau aus diesem Grund sollte man die Boost Libraries meiden.
http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=140138364501
Also für 24 Euro kann ich nicht lange programmieren....Gruß,
Simon2.
-
Hihi, ja, weil wir alle nen U3W Controller haben

-
hustbaer schrieb:
Hihi, ja, weil wir alle nen U3W Controller haben


Nun, ich oute mich gerne, dass ich mich mit HW noch besonders auskenne und auch nicht allzuviel Zeit in die eBay-Suche gesteckt habe ...
trotzdem sind <=2 DB Plattenplatz viiiiiel billiger als die Entwicklungszeit die man in ein "selbstentwickeltes boost" (und sei es nur ein smart Pointer) stecken müsste.Gruß,
Simon2.