Objekte dynamisch allozieren

  • Hallo Patrick,


    du arbeitest in C++, nicht in C. Und da versucht man explizite Pointer möglichst zu vermeiden. Üblicherweise reservieren Variablen bei der Deklaration den benötigten Speicherplatz und geben ihn bei ihrer Zerstörung wieder frei. Das geschieht zum Beispiel, wenn die Funktion verlassen wird, in der die Variable deklariert wurde. Das gilt auch für Instanzen von Klassen. In ungünstigen Fällen kann das zur Heap - Fragmentierung führen. Garbage Collection wäre eine Lösung, leider gibt es die in C++ nicht.

    Du kannst jetzt das ganze Memory - Management selbst mit reinen C - Befehlen machen. Das hilft aber nur, wenn du ganz auf den Einsatz von Bibliotheken verzichtest. Was du aber im Zusammenhang mit Klassen machen kannst, ist die explizite Erzeugung und Zerstörung von Instanzen mit new und delete. new gibt dann einen Pointer auf die Instanz zurück, hat aber die Eigenschaften der Klasse. So ruft delete automatisch den Destruktor auf, bevor der Speicher freigegeben wird.


    Im Kurs wird das aber vorläufig kein Thema sein. Diese Klassen sind auf einfachem Level schon schwierig genug. Momentan schaut sich knapp einer von fünf die Videos bis zum Ende an. Die anderen geben schon wesentlich früher auf.


    Gruss

    René

  • Hallo,

    Mich würde das Thema, wie Objekte dynamisch erzeugt und wieder frei gegeben werden, interessieren. Also new, malloc, free, delete etc. Arduino hat sehr wahrscheinlich keine Garbage Collection wie C#, da muss man aufpassen, dass einem der Speicher nicht ausgeht.


    Ich habe das Regenwetter heute benützt, um in meinem Projekt ein struct zu einer Klasse umzubauen. Dort ist eine verkettete Liste/Queue (LinkedList von Ivan Seidel), welche die Objekte vorhält. So können die Sensormesswerte in einer Kurve auf dem M5Stack Display angezeigt und gescrollt werden. In einer statischen Variable speichere ich dann, wieviele Werte über einem maximalen Wert sind, was dann ins EEPROM geschrieben wird. Eine ideale Anwendung für die statische Klassenvariable :thumbup:


    Wie man das mit der Liste macht, findet sich hier: https://github.com/ivanseidel/…s/ClassList/ClassList.pde


    Freue mich schon auf die kommenden Folgen <3


    Viele Grüsse aus Mostindien ( Thurgau)


    Patrick