"auto_ptr" außerhalb der deklaration initialisieren?
-
Also ich kann auto_ptr folgendermaßen über den Konstruktur initialisieren:
auto_ptr<int> atm(new int);
Kann ich das Speicherreservieren auch danach machen? Also in etwa so:
auto_ptr<int> atm;
atm = new int;Also so wie oben geht es nicht, aber vielleicht geht es anders?
-
Hallo
dafür gibt es die methode reset
auto_ptr<int> atm; atm.reset(new int);bis bald
akari
-
Hey, vielen Dank für die Antwort. Hast mir sehr geholfen!
-
Zum Hintergrund:
nen auto_ptr arbeitet nach dem besitzerprinzip ...
also bei nen zuweisungs Op wird der Besitz uebertragen, deshalb macht ne Initialisierung mittels eines rohen pointers zwar Sinn, aber nicht die zuweisung mittels einem zuweisungsOp, sprich der ist sogar eher gefaehrlich (denke an die möglichen implizieten konvertierungen) da ... Man soll auch mit einer etwas umstaendlicheren vorgehensweisse da extra drauf aufmerksam gemacht werden was genau man da tut.Um den Zuweisungsop trotzdem zu benutzen, waere die richtige Variante nen temporaeres auto_ptr object mit dem inhalt zu erzeugen, und dem den Inhalt gleich wieder wegzunehmen ....
atm = std::auto_ptr<int>(new int);
wobei die reset version natuerlich performanter an der stelle ist, und genau so sauber ... du willst ja an der stelle auch keine Zuweisung (keine besitzuebernahme) im Sinne des auto_ptrs ...
Ciao ...