auto_ptr unter Kylix
-
Hi!
Folgender Code läßt sich unter BCB6 als CLX-Anwendung kompilieren und läuft auch.
std::auto_ptr<TStringList> a( new TStringList ); std::map<AnsiString, std::auto_ptr<TStringList> > mapTest; mapTest[ "A" ] = a;Unter Kylix3 bringt der Compiler aber einen Fehler.
E2285 Could not find a match for 'auto_ptr_ref<TStringList>::auto_ptr_ref(auto_ptr<TStringList>,TStringList *)'in der Datei memory
template<class _Tp1> operator auto_ptr_ref<_Tp1>() { return auto_ptr_ref<_Tp1>(*this, this->get()); }Kann jemand erklären, warum der Kylix-Compiler den auto_ptr_ref-Kontruktor nicht findet und was man dagegen tun kann?
Ich stehe vor einem echten Problem, wenn ich dafür keine Lösung finde, da dieser Code ein Teil eines größeren Projekts ist und dort solche maps aus AnsiStrings und auto-ptr'n recht oft vorkommen. Wie gesagt: Unter BCB6 (Windows) läuft das Programm problemlos.
-
Frag das lieber im C++ Unterforum.
auto_ptr in Container ist ne ganz ganz schlechte Idee.
-
Stimmt schon: Das Thema würde auch ganz gut ins C++Forum passen. Ich habe es hier hinein gestellt, da es scheinbar speziell unter Kylix nicht funktioniert.
Warum ist auto_ptr im Container eine schlechte Idee?
-
STL-Containerelemente müssen häufig kopiert werden (z.B. beim Einfügen, Sortieren usw.). Aus diesem Grund erwartet man von ihnen, dass Kopie und Original äquivalent sind. Dies trifft auf auto_ptr aber nicht zu, da durch die Besitzübertragung das Original zurückgesetzt wird und nach dem Kopiervorgang auf NULL zeigt.
Standardkonformen Implementationen verweigern das Anlegen von STL-Containern mit auto_ptr bereits zur Compilezeit. Leider gibt es aber einige Implementationen (z.B. die des VCs von Microsoft) die dies erlauben. Dies ist nicht standard, nicht portable und niemals eine gute Idee.
Quelle: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=auto_ptr