std::auto_ptr
-
Hallo!
Ich habe gelesen, dass auto_ptr im nächsten Standard deprecated ist, stimmt das?
Wenn ja, sollte man auto_ptr jetzt überhaupt noch benutzen? Gibt es außer boost eigentlich noch andere Alternativen für einen Smart-Pointer?
Und sollte man weiterhin "Dumb"-Pointer benutzen, wenn eine Referenz nicht in Frage kommt?MfG,
der verwirrte baron
-
LOKI hat noch smart-pointer:
http://sourceforge.net/projects/loki-libAber was spricht gegen die smartpointer von boost? die musst du ja nicht mal installieren, die sind doch header-only.
-
Warum überhaupt Boost oder LOKI? Es gibt doch schon längst std::tr1::shared_ptr, std::tr1::scoped_ptr usw. DESHALB ist auto_ptr deprecated, weil es natürlich Alternativen gibt. Die Smartpointer werden in C++0x auch entsprechend von std::tr1 nach std wandern. Oder meint ihr, man macht ein Feature deprecated ohne einen (besseren) Ersatz anzubieten?
Außerdem heißt deprecated nicht, das er fehlen oder gestrichen wird, sondern man soll ihn für neue Projekte nicht mehr absichtlich benutzen und auf Alternativen ausweichen.
-
Artchi schrieb:
Warum überhaupt Boost oder LOKI? Es gibt doch schon längst std::tr1::shared_ptr, std::tr1::scoped_ptr usw. DESHALB ist auto_ptr deprecated, weil es natürlich Alternativen gibt. Die Smartpointer werden in C++0x auch entsprechend von std::tr1 nach std wandern. Oder meint ihr, man macht ein Feature deprecated ohne einen (besseren) Ersatz anzubieten?
Außerdem heißt deprecated nicht, das er fehlen oder gestrichen wird, sondern man soll ihn für neue Projekte nicht mehr absichtlich benutzen und auf Alternativen ausweichen.
Und wenn der eigene Compiler std::tr1 nicht kennt, soll man dann std::auto_ptr<> benutzen oder nicht?
-
Compiler wechseln... oder nach updates prüfen
-
wenn du kein tr1 drin hast, würde ich dir empfehlen die entsprechenden boost-bestandteile zu nutzen. das ist natürlich kein zwang, genau wie es kein zwang ist den tr1 zu nutzen.
hier greift allerdings aus meiner sicht in den meisten fällen eher der gesunde menschenverstand: auto_ptr ist nicht wirklich der brüller. da es irgendwie weder fisch noch fleisch sein will. scoped_ptr sind aus meiner sicht wesentlich häufiger das, was man eigentlich an der stelle ausdrücken will.
-
TR1 kann man nachrüsten. Muß man ja wohl nicht den Compiler wechseln. Wäre ja irgendwie witzlos, TR1 einzuführen aber keiner kann es nutzen. Der Sinn der TRs (es kommen ja noch welche) ist, es möglichst schnell auf aktuelle Compiler einsetzen zu können, ohne auf einen nächsten C++-Standard warten zu müssen.
TR1 gibts z.B. von GNU-GCC, von Dinkumware, Apache und von Boost. Wenn man nur die Pointer braucht: Boost runter laden und deren TR1-Wrapper in den Compiler-Pfad eintragen, fertig.
Ab 2008 gibts TR1 auch von MS für MSVC2008.