2 Fragen zu Anfängercode



  • Lasse "new" bleiben solange du nicht damit umgehen kannst und nicht verstehst wie es funktioniert.
    Da gibt es andere, einfachere Konzepte dein Problem zu lösen.



  • New ist nicht das problem, hab delete einfach nicht gemacht, weil ich erstmal das prog zum laufen bringen wolote. Euch gehts sicher um den fehlenden code im destruktor if (x != NULL) delete x, x = NULL? ansonsten lasse ich mich gerne belehren!

    Ich verstehe die fragen 2 und 3 immernoch nicht. Im buch klappts mit dem this pointer ohne "*" und ich finde den unterschied einfach nicht.

    Dann ist noch dazugekommen, dass wenn ich den werft konstruktor ohne parameter genau den selben code wie mit parameter verpasse, mit dem einzigen unterschied, dass name ="default"; ist und ich ne instanz ohne namen erstellen will, bei folgendem main code:

    int main () {
    	string satz;
    
    	werft hallo();
    	hallo.zeigedaten(); 
    	cin >> satz;
    
    	return 0; 
    }
    

    Der Fehler: Request for member 'zeigedaten' in 'hallo' which is in of non class type 'werft()'

    Bei instanzerstellung mit namen klappt das und am fehlenden namen kanns ja nicht liegen, der ist ja "default"



  • Dlrk schrieb:

    Euch gehts sicher um den fehlenden code im destruktor if (x != NULL) delete x, x = NULL?

    Nee, denn DAS wäre typischer Opensource-Gamercoderz-Code. Wenn Du "if (x != NULL) delete x, x = NULL" nachziehen willst, wechsele vielleicht die Lernquelle. Denn "delete x" macht nicht mehr und nicht weniger.



  • Auch das x=NULL;?



  • Wozu solls gut sein? Wennst mehrmals delete auf den selben Pointer aufrufst hast einen fehler in der Programmlogik. Lass ma krachen?



  • Dlrk schrieb:

    werft hallo();
    

    Such mal nach "c++ most vexing parse" in einer Suchmaschine deines Vertrauens.
    Oder lass einfach die Klammern weg.



  • @Swordfish: Wozu muss das irgendwo zu gut sein? volkards Post ist in diesem Punkt schlicht irreführend. Da wird kein x=NULL durchgeführt.



  • Gut, aber dann frag dich doch mal andersrum: wozu soll es denn gut sein, Resourcenverwaltung und andere werftspezifische Dinge zu vermischen? Wozu überhaupt "new" und kein Smartpointer? Solange es dafür keine sinnvollen Antworten gibt, ist es doch müßig, über den Sinn von x=nullptr; hinter dem delete im Destruktor zu diskutieren.



  • danke wob 😃



  • So gesehen braucht man auch keine Smartpointer, oder überhaupt irgendwelche Zeiger, nicht wahr... werft hallo() lässt grüßen.

    Aber schon gut, ich habe verstanden, hier sind nur absolute Cracks unterwegs, denen solche Dinge natürlich völlig klar sind. Einen Anfänger irre führende Aussagen kann man sich aber auch einfach schön reden.



  • @ swordfish, ich schätze das ist nicht der selbe pointer. jede instanz hat ihre eigene adresse und nur die wird im destruktor verwendet



  • Ich bin recht neu hier zugange. Mein Eindruck ist: wer sinnvolle Fragen stellt, bekommt auch sehr fundierte Antworten.

    Wer idiotische Fragen stellt oder es auch nach mehrmaliger Aufforderung nicht schafft, die exakten Compiler-Fehlermeldungen zu posten, bekommt (zurecht!) keine sinnvollen Antworten mehr. Aber was ist daran schlimm? Warum soll dieses Forum 10000x dieselben Anfängerfragen beantworten, wenn der Verweis auf www.cplusplus.com oder ähnliche Adressen es auch tut?

    YMMV.


Anmelden zum Antworten