Seite 5 von 202 ErsteErste 1234567891555105 ... LetzteLetzte
Ergebnis 61 bis 75 von 3024

Thema: [Programmiererstammtisch] "Zum ächzenden Compiler"

  1. #61
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.015
    Zitat Zitat von [VK] Beitrag anzeigen
    Das hätte ~ListElem() heißen müssen, das leer sein soll und das war deleteFirstElem()
    Das würde gehen.

  2. #62

  3. #63
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von [VK] Beitrag anzeigen
    Ok, von Intelligenten Zeigern hab ich glaub noch nie was gehört
    Ein intelligenter Zeiger ist ein Objekt einer Klasse, die sich wie ein Zeiger verhält. Dies wird dadurch erreicht, das die Operatoren *, & , -> sowie die == und != implementiert werden.
    Es gibt verschieden intelligenter Zeigertypen, z.B. Zeiger mit Referenzzählung. Gemein haben sie, dass sie RAII ("resource acquisition is initialization"): Ressourcen werden durch durch den Konstruktur in Beschlag genommen und mit dem Destruktor wieder freigelassen. (Als Ressource zählt z.B. ein Zeiger, eine Datei usw.)
    Dadurch, dass der Destruktor immer aufgerufen wird (wenn das Objekt den Gültigkeitsbereich verlässt), wird auch jede Ressource freigegeben, Speicherlecks können nicht auftreten.

    Der C++ 11 Standard hat intelligente Zeiger einführt, vorher wahr der Einsatz von externen Bibliotheken nötig (z.B. Boost).

  4. #64
    ¡Olé! Avatar von Harleen
    Registriert seit
    07.01.06
    Ort
    Bremen
    Beiträge
    9.359
    Auch vor C++11 gab es schon die auto_ptr. Nur haben die sich nicht immer so verhalten, wie man es erwartet hat.
    Aber warum schreibt man überhaupt eine Listenklasse, wenn es doch schon std::list gibt?

  5. #65
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.406
    Zitat Zitat von Harleen Beitrag anzeigen
    Auch vor C++11 gab es schon die auto_ptr. Nur haben die sich nicht immer so verhalten, wie man es erwartet hat.
    Aber warum schreibt man überhaupt eine Listenklasse, wenn es doch schon std::list gibt?
    Einfach zum üben/ausprobieren von verschiedenen Konzepten, dachte einfach das ist ein nettes kleines Projekt wo man auch ein bisschen rumspielen kann und recht schnell ein Ergebnis hat. Hab seid Ewigkeiten nichts gescheites mehr programmiert und wollte dann auch gleich c++ lernen/auffrischen/ausprobieren. Gibt ja glaub auch eine vector Klasse wenn ich mich nicht täusche, oder die war glaub für Arrays...

    Hmm, hab grad noch mal nee Frage zur Allokation: Und zwar, gibt es irgendwelche "Vorgaben/Richtlinien" wann man welches benutzt? Aktuell hab ich das Gefühl das ich jede Klasse/Objekt dynamisch (über new) reserviere, und nur die Variablen in der Klasse auf den Stack lege wenn sie sowieso nur atomar sind. Hab immer irgendwie die Befürchtung das ich ein erstelltes Objekt nicht dynamisch reserviere und es mir dann überläuft

    Und jetzt wollte ich auch grad den Text mit :w speichern

  6. #66
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.015
    Zitat Zitat von [VK] Beitrag anzeigen
    Hmm, hab grad noch mal nee Frage zur Allokation: Und zwar, gibt es irgendwelche "Vorgaben/Richtlinien" wann man welches benutzt? Aktuell hab ich das Gefühl das ich jede Klasse/Objekt dynamisch (über new) reserviere, und nur die Variablen in der Klasse auf den Stack lege wenn sie sowieso nur atomar sind. Hab immer irgendwie die Befürchtung das ich ein erstelltes Objekt nicht dynamisch reserviere und es mir dann überläuft
    Deine Befürchtung ist unbegründet. So klein ist der Stack nicht. Es ist sogar besser mit den Stack zu arbeiten, weil man so weniger Fehler machen kann. Variabeln einer Klasse nennt man Attribute.

  7. #67
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.406
    Zitat Zitat von rucivfan Beitrag anzeigen
    Deine Befürchtung ist unbegründet. So klein ist der Stack nicht. Es ist sogar besser mit den Stack zu arbeiten, weil man so weniger Fehler machen kann. Variabeln einer Klasse nennt man Attribute.
    Also bei Java hab ich glaub schonmal nen Stackoverflow geschafft

    Naja, das hauptproblem das ich nicht sicher bin wann ich was benutze bleibt bestehen. Meine Level Klasse die ich heute Nacht zusammengehackt habe

    class Level{
    private:
    Level();
    public: //public weil zu faul getter und setter zu schreiben
    Player* player;
    int xSize;
    int ySize;

    Tile* level;

    [...]
    }

    Player und Tiles werden beide dynamisch allokiert (und im dekonstruktor zerstört). Wenn ich mir sicher bin das die Größe von Player sich nicht weiter ändert, kann ich das glaub auch auf den Stack ablegen oder? Was ist wenn ich Player später noch "Items" (variable Anzahl dieser) unterm Player abspeichern will? Dann muss ich ja Player selber auch wieder dynamsich allokierbar machen damit oder? Alternativ kann man auch wieder zum Listenbsp gehen. Die Elemente könnte ich ja auf den Stack legen (hat nur ein daten Feld und einen Pointer), die Liste selber muss aber dynamisch allokierbar sein weil sie ja eine unbestimmte Anzahl an Elementen haben kann. (Oder, ist glaub egal weil Liste selber nur den Head kennt ) Und wenn ich dann statt einem int zbs ein Array speichern wollte in den ListenElementen müsste ich ja das array dyn alloc und damit auch das ListElem oder ist da wieder

    Ich glaub ich hab Gedanklich die von den Pointern reservierten Speicher in die Stelle des Pointers eingefügt was nicht ganz stimmt, die verweisen ja im Grunde nur auf speicher im Heap...

    Eidth: Gehe glaub mal langsam schlafen, scheine nicht mehr 100% gerade zu denken

  8. #68
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.015
    In welcher Zeitzone lebst du?

    get und set-Methoden wegzulassen, ist aber wirklich schlechter Stil. Das sollte man nicht mal aus Faulheit machen.

  9. #69
    Moderator Avatar von viktorianer
    Registriert seit
    14.07.07
    Ort
    Berlin
    Beiträge
    14.912
    @VK
    Emoticon: picard

    Ich führe am Samstag und Sonntag ein Effective Java Workshop in Berlin durch. Der heißt zwar Java aber das sind nur Code-Beispiele in Java. Der Inhalt gilt für alle Sprachen... Hast du nicht Lust? (ist auch kostenlos...)


    MP live streams | Civ6: Civ 6 - Allgemeines und Civ 6 Strategien-FAQ | PBEM-Tool : PBEM1 - Russland PBC6 - Ägypten+Sumerien PBC18 - Cree PBC19 - Australien

    Amateurastronomie Blog

    "Eine überragende Kultur kann nicht von außen her erobert werden, so lange sie sich nicht von innen her selbst zerstört hat"

  10. #70
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.406
    Guten Morgen

    Zitat Zitat von rucivfan Beitrag anzeigen
    In welcher Zeitzone lebst du?
    Deutschland, warum?

    get und set-Methoden wegzulassen, ist aber wirklich schlechter Stil. Das sollte man nicht mal aus Faulheit machen.
    Ich weiß das es furchtbarer Stil ist, aber ich programmiere zur Zeit mit vim und nicht mit einer IDE und das Projekt ist klein genug um den Überblick behalten zu können und ich bin faul und es ist spät .

    Zitat Zitat von viktorianer Beitrag anzeigen
    @VK
    Emoticon: picard

    Ich führe am Samstag und Sonntag ein Effective Java Workshop in Berlin durch. Der heißt zwar Java aber das sind nur Code-Beispiele in Java. Der Inhalt gilt für alle Sprachen... Hast du nicht Lust? (ist auch kostenlos...)
    Nee, sorry, Berlin ist mir zu weit weg...

  11. #71
    Banned
    Registriert seit
    22.06.08
    Ort
    @Yasmin_D_Ahara
    Beiträge
    13.967
    Es geht bei Faulheit beim Programmieren nicht nur um Stil, sondern dass irgendwann auch mal wer anderes im Code durchsehen soll. Und wenn da keine vernünftige Struktur drin ist, am Besten noch in Kombination mit unterlassener Kommentierung, sieht da kein Mensch durch. Hatte ich vor kurzem bei einer Homepage'programmierung'. Ich wollte lediglich den Hintergrund von Weiß auf Schwarz ändern (Corporate Design und helle Schrift auf dunklem Grund ist ohnehin viel toller als andersrum). Dafür waren lediglich 5 Variablen zuständig, die natürlich nicht alle background hießen und nicht alle, die background hießen, beschäftigten sich mit dem Hintergrund und kommentiert war gar nichts. Jedenfalls nichts, was nützlich gewesen wäre. Und natürlich waren die Variablen über den ganzen Code verteilt. Ach ja, wunderbare Stunden mit dem Durchprobieren jeder einzelnen Variable mit dem Wert "#fff" und danach den Spaß noch mal mit "#000" (es gibt natürlich auch immer noch mehr als eine Schriftfarbe...) verbracht Ich glaub, wenn ich auf der grünen Wiese angefangen hätte, wär' ich schneller fertig gewesen...

    Was lernen wir draus: Gewöhnt es euch gar nicht erst an, faul beim Programmieren zu sein.

  12. #72
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.406
    Zitat Zitat von Yasmin D'Ahara Beitrag anzeigen
    Es geht bei Faulheit beim Programmieren nicht nur um Stil, sondern dass irgendwann auch mal wer anderes im Code durchsehen soll. Und wenn da keine vernünftige Struktur drin ist, am Besten noch in Kombination mit unterlassener Kommentierung, sieht da kein Mensch durch. Hatte ich vor kurzem bei einer Homepage'programmierung'. Ich wollte lediglich den Hintergrund von Weiß auf Schwarz ändern (Corporate Design und helle Schrift auf dunklem Grund ist ohnehin viel toller als andersrum). Dafür waren lediglich 5 Variablen zuständig, die natürlich nicht alle background hießen und nicht alle, die background hießen, beschäftigten sich mit dem Hintergrund und kommentiert war gar nichts. Jedenfalls nichts, was nützlich gewesen wäre. Und natürlich waren die Variablen über den ganzen Code verteilt. Ach ja, wunderbare Stunden mit dem Durchprobieren jeder einzelnen Variable mit dem Wert "#fff" und danach den Spaß noch mal mit "#000" (es gibt natürlich auch immer noch mehr als eine Schriftfarbe...) verbracht Ich glaub, wenn ich auf der grünen Wiese angefangen hätte, wär' ich schneller fertig gewesen...

    Was lernen wir draus: Gewöhnt es euch gar nicht erst an, faul beim Programmieren zu sein.
    Ist mir schon klar, hatte ja selber oft genug mit dem Problem zu kämpfen, aber wie gesagt, das Code snippet war nicht dazu da gelesen zu werden, normal sind die getter und setter immer das erste was ich mache weil es keinen Grund gibt sie nicht zu machen

    Zumindest beim Kommentieren bin ich der Meinung das guter Code (so gut wie) keine Kommentare braucht

    Hmm, Nebenbei eine Frage: Gibt es eine Möglichkeit eine Variable als nur durch eine Methode ansprechbar zu machen, also auch innerhalb der eigenen Klasse?

  13. #73
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von [VK] Beitrag anzeigen
    Ist mir schon klar, hatte ja selber oft genug mit dem Problem zu kämpfen, aber wie gesagt, das Code snippet war nicht dazu da gelesen zu werden, normal sind die getter und setter immer das erste was ich mache weil es keinen Grund gibt sie nicht zu machen
    Ein Grund sie nicht zu machen ist, wenn sie nur für die Implementierung wichtig sind und nicht für die öffentliche API gebraucht werden.

    Für die öffentliche API braucht man Getter und Setter, selbst wenn sie trivial sind, denn man kann nie wissen, ob man später in der Setter doch noch eine Einschränkung des Werts hinzufügen muss. Auf diese Weise bleibt die öffentliche API erhalten.

    Hmm, Nebenbei eine Frage: Gibt es eine Möglichkeit eine Variable als nur durch eine Methode ansprechbar zu machen, also auch innerhalb der eigenen Klasse?
    Nein. Wozu will man auch sowas haben?

  14. #74
    ¡Olé! Avatar von Harleen
    Registriert seit
    07.01.06
    Ort
    Bremen
    Beiträge
    9.359
    Benutze in C++ niemals nackte Zeiger, wenn du es vermeiden kannst! Man spart sich dadurch viel Ärger.
    Wenn du verhindern willst, dass deine Objekte auf dem Stack landen, dann schau dir den auto_ptr (obsolete ab C++11) bzw. shared_ptr (neu in C++11) an. Da muss man nur allokieren und ruft das delete nicht selbst auf.

    In der Level-Klasse fehlen übrigens noch der Copy-Konstruktor und der Zuweisungsoperator.
    Wenn du davon eine Kopie machst, hast du undefiniertes Verhalten, dem du mit dem Debugger tagelang hinterherrennen kannst. Mit shared_ptr würde das auch ohne selbstgeschriebene Copy-Konstruktoren/Zuweisungsoperator funktionieren. Hättest du einen auto_ptr benutzt, würde dein Programm irgendwann wenigstens mit einem NULL-Pointerzugriff abstürzen.

  15. #75
    Macht Musik Avatar von Peregrin_Tooc
    Registriert seit
    21.05.05
    Ort
    St. Ingbert
    Beiträge
    11.144
    Zitat Zitat von alpha civ Beitrag anzeigen
    Nein. Wozu will man auch sowas haben?
    Was man machen könnte, wenn man denn unbedingt wollte, wäre alle Attribute als privat zu deklarieren und setter und getter zu schreiben und danach eine Unterklasse zu machen, die die eigentliche Arbeit machen soll. Wenn man denn aus irgendwelchen Gründen ein solches Konzept unbedingt bräuchte.

Seite 5 von 202 ErsteErste 1234567891555105 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •