auto_ptr
-
Hallo,
kann mir mal eine die funktion von auto_ptr erklären
#include <memory> #include <exception> #include <iostream> using namespace std; int main() { try { auto_ptr<Buffer> b (new Buffer()); // ... b -> transcode( -4); // Wird doch nach auto_ptr ausgeführt // ... } catch (const exception& e) { cerr << "Program exception\n"; exit(1); } }
-
Nicht, bis du lernst, dich endlich mal vernünftig auszudrücken und dein Problem konkret zu beschreiben.

-
es wird new buffer angefordert.
Das new muss wieder freigegeben werden irgendwann mal.
Wenn aber eine exception kommt springt er automatisch in den catch block.aber der auto_ptr soll das problem angeblich lösen. nur wie ?
-
Tja, was macht denn der auto_tr<...>?
Guck mal in die Doku deiner Wahl.
-
Stichwort RAII. Beim Verlassen des Scopes wird der Destruktor des
auto_ptr-Objekts aufgerufen.
-
versteh ich das richtig dass auto_ptr auf den selben Speicher zeigt wie b ??
-
blurry333 schrieb:
versteh ich das richtig dass auto_ptr auf den selben Speicher zeigt wie b ??
Siehst du irgendwo ein * ?
Nein.
-
warum läuft mein Programm nicht.
z.B. wird in der Methode get "Hallo" nicht ausgegeben
#include <iostream> using namespace std; class test{ public: void get(){cout<<"Hallo";} ~test(){} }; void funk() { test* ptr=new test; ptr->get(); } int main() { char x; funk(); cin>>x; }
-
WTF???

-
blurry333 schrieb:
z.B. wird in der Methode get "Hallo" nicht ausgegeben
Versuch mal
flushoderendl.
-
blurry333 schrieb:
z.B. wird in der Methode get "Hallo" nicht ausgegeben
Doch.
(Jedoch möglicherweise nicht bevor cin>>x geschieht. Da du den Stream nicht zur Synchronisation zwingst sind die Zeichen eventuell noch im Puffer.)
-
da kommt keine Ausgabe
-
ok plötzlich gehts

hab die datei gelöscht und nochmal neu angelegt.
-
was ich ja eigentlich testen wollte, ob der destruktor test
nach verlassen von funk aufgerufen wird. DAchte wenn der scope verlassen
wird , muss der Destruktor aufgerufen werden.Der Destruktor wurde jedenfalls nicht aufgerufen !
-
#include <iostream> using namespace std; class test{ public: void get(){cout<<"Hallo"<<endl;} ~test(){cout<<"Destruktor wurde aufgerufen";} }; void funk() { test* ptr=new test; ptr->get(); } int main() { char x; funk(); cin>>x; }
-
Wie sollte er auch, wenn auf den Pointer kein
deleteaufgerufen wird? (Um korrekt zu sein: der Destruktor vontestwird sehr wohl aufgerufen, nur der Destruktor von*testnicht.) Probiere das selbe Beispiel, indem dutest* ptr=new test;durchauto_ptr<test> ptr(new test);ersetzt und du siehst gleich die Wirkung vonauto_ptr.
-
ok jetzt geht er an die STelle des Destruktors wenn ich den auto_ptr
verwende. Allerdings steht dann dort "für die aktuelle Position ist
kein Quellcode verfügbar " .
-
Wo ist "dort"?
-
Meldung von Visual STudio halt.
aber sollte das delete nicht in den Destruktor rein
und nicht in die funk .
-
kleine KOrrektur wenn ichs ohne Debugger aufrufe, dann gehts

-
Junge, kauf dir ein dickes Buch über Grundlagen.