auto_ptr
-
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.
-
blurry333 schrieb:
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); } }http://www.cprogramming.com/tutorial/auto_ptr.html
Allerdings sollte du wirklich den Rat von SchwereMeinung folgen und ein gutes Buch kaufen.
-
-
häh was ich noch nicht versteh.
warum wird der auto_ptr zeiger nach Verlassen des scope automatisch freigegeben aber ein anderer Zeiger nicht ?
wenn ich das delete im Scope ausführe und vorher wird ein exception ausgelöst dann bleibt der Speicher, aber wenn ich das delete im Destuktor des
objekts ausführe müßte doch auch dieser nach verlassen des scope
automatisch freigegeben werden ?
-
Hallo
Am einfachsten schaust du mal bei Google nach RAII. Dort findet genug Informationen um alles zu verstehen.
Hier nur nochmal kurz zu deinem Problem:
blurry333 schrieb:
häh was ich noch nicht versteh.
warum wird der auto_ptr zeiger nach Verlassen des scope automatisch freigegeben aber ein anderer Zeiger nicht ?...
Der auto_ptr selbst ist kein Zeiger sondern ein Lokales Objekt, deswegen auch kein ***** bei der Definition. Diese Objekte werden _immer_ nach verlassen ihres Scopes gelöscht. Dadurch wird vom auto_ptr der Destruktor aufgerufen, welcher wiederum das in sicher beherbergte Objekt löscht.
Bei einem "normalen" Zeiger, musst du das Objekt mit new anlegen und mit delete wieder löschen und nur dann wird der Destruktor des Objektes aufgerufen.
Bitte erst genau lesen was man dir postet. Die meisten machen dies nicht zum Spaß sondern um dir zu helfen.
Mfg marco