Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....



  • Moin Leute,
    Sieht so aus als hat mir der C++ Aufbaukurs nicht viel gebracht. Mit dem "sehr gut" kann ich mir grad mal den Hintern abwischen 😤

    Also, ich erstelle ein Statisches Objekt (im Stack):

    CL_DB_Sqlite DB_DartLiga("DartLiga.db");
    

    das heißt, jedesmal wenn ich in einer anderen Klasse oder anderen Funktion auf die Datenbank zugreifen muss ist dieses Objekt dann wieder zerstört?

    ein dynamisches Objekt (im Heap):

    CL_DB_Sqlite^ p_DB_DartLiga = gcnew CL_DB_Sqlite("DartLiga.db");
    

    Gut, jetzt hab ich ein Pointer auf mein Objekt und müsste es also immer wieder benutzen können, oder nicht?

    Normalerweise kann ich mir doch die Speicheradresse vom Statischen Objekt nehmen und damit weiterarbeiten oder nicht? Ist die überhaupt greifbar?

    Wieso lese ich immer das man "new" nicht benutzen soll. C++/CLI benutzt doch unmassig dynamische Objekte

    // Zeile zwei bin ich mir schon wieder nicht mehr Sicher
    this->label_meldung->Text = "sonst was";  // nur so runtergeschrieben
    System::Object^ sender
    System::EventArgs^ e
    

    dazu kommt man nicht darum mit

    ListBox^ lb = safe_cast<ListBox^>(sender);
    ArrayList^ stapel = .....................
    

    zu arbeiten. Alles Pointer, Und wenn nich nicht falsch liege, liegt alles im Heap?

    Bitte
    erklärt mir was ich wo anwenden sollte/kann! Und warum das so ist!

    Alles ist grad so verwirrend, ich blicke gar nicht mehr durch ☹


  • Administrator

    @MaikHo Ich bin jetzt nicht ganz sicher, ob ich dich vollständig verstanden habe.

    Aber zuerst einmal: C++/CLI ist eine Schnittstellensprache. Sie dient ausschliesslich dazu C++ Code mit der DotNet Plattform zu verbinden. Man sollte grundsätzlich keine Programme in C++/CLI schreiben.

    Wenn du gcnew aufrufst, bekommst du auch nicht wirklich Zeiger. Das gcnew entspricht dem new aus C#. Damit wird das Objekt irgendwo angelegt und vom Garbage Collector der DotNet Plattform verwaltet. Dies sind somit wenn überhaupt eher Smart Pointer, versteckt im Syntax Sugar der Sprache. Und es wird irgendwo angelegt, weil dies der Garbage Collector völlig frei entscheiden kann. Wahrscheinlich liegen sie auf dem Heap, ja. Aber es ist ein dynamisch von der DotNet Plattform verwalteter Speicherbereich. Das ist alles fern weg von new in C++.

    Und du sollst new in C++ nicht nutzen, weil du Smart Pointer oder Container verwenden sollst. Also Klassen, welche die Speicherverwaltung für dich übernehmen und das sauber kapseln. Es geht nicht darum, dass man es nicht auf den Heap legen sollte. Es geht darum, dass die Speicherverwaltung sauber ist.



  • @Dravere sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    Man sollte grundsätzlich keine Programme in C++/CLI schreiben

    Will ich eigentlich nicht, aber das ist eine Vorgabe meines Referenzprojektes

    Ansonsten war deine Erklärung fast sehr verständlich für mich. Das mit den Smart Pointern habe ich verstanden aber mit den Klassen kann ich grad nix wirklich mit anfangen.

    https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Speicherverwaltung#Speicherklassen

    Vielleicht bin auf dem richtigen Weg, aber hätte jemand ein Anwendungsbeispiel mit Erklärung für mich? Für das was im Netz rumschwirrt bin ich grad anscheinend zu dumm oder mir fehlt da noch Wissen in meiner Hohlrübe.

    PS: C++ in 4 Wochen (IBB) sollte eigentlich alle Grundlagen vermitteln, aber zur Zeit stehe ich da und frage mich, WIESO, VERDAMMT NOCHMAL , ich habe doch aufgepasst!
    Und sowas schimpft sich Fachinformatiker, eher Fachidiot 🤔


  • Mod

    Klassen für Speicherverwaltung sind ganz was anderes als Speicherklassen. Klassen für Speicherverwaltung will heißen, dass man reservierten Speicher (oder allgemein jede Ressource) an ein Halterobjekt bindet, das keine andere Aufgabe hat, als sich um die Verwaltung dieser Ressource zu kümmern. So etwas, wie ein Smartpointer halt. Aber da es etwas mühsam wäre, sich für jedes Programm alle üblichen Datenstrukturen neu aus Smartpointern zusammen zu basteln, gibt es in C++ ein schönes Spektrum von vorgefertigten Datenstrukturen dafür. Guckst du:
    Smartpointer
    Fertige Datenstrukturen
    Damit programmiert man in reinem C++ Programme mit korrekter Speicherverwaltung, weil mit der Kombination aus diesen Klassen zur Speicherverwaltung, und aus der Speicherverwaltungsklasse "automatisch" (wie in dem von dir gefundenen Link, aber hier etwas ausführlicher) dann gar nichts mehr schiefgehen kann, und das obwohl man als Programmierer gar nichts spezielles dafür zu tun braucht (außer diese Klassen einzusetzen). Daher gilt es in C++ als Fehler, wenn man irgendwo ein new sieht, denn das heißt, dass man diese Klassen nicht benutzt hat.

    Dieses Modell passt aber nicht ganz zu der Speicherverwaltung in C++/CLI, siehe Draveres Erklärung, wie das da funktioniert.



  • Und gib deinem Projektverantwortlichen diesen als wichtig markierten Link: Windows Forms und Visual C++ MACHT KEINEN SINN! (und das gilt erst recht für die neueren VS Versionen, denn diese bieten schon lange keine Unterstützung mehr für WinForms mit C++/CLI).



  • @MaikHo sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    PS: C++ in 4 Wochen (IBB) sollte eigentlich alle Grundlagen vermitteln, aber zur Zeit stehe ich da und frage mich, WIESO, VERDAMMT NOCHMAL , ich habe doch aufgepasst!

    Was wird denn gelehrt (bzw. in welcher Reihenfolge)?

    • new/delete oder make_unique/make_shared
    • new int[] oder std::vector<int>
    • for-Schliefe oder Algorithmen aus <algorithm>


  • @SeppJ sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    Dieses Modell passt aber nicht ganz zu der Speicherverwaltung in C++/CLI, siehe Draveres Erklärung, wie das da funktioniert.

    Ja, das hab ich verstanden!
    Und danke für die Links, die haben mir sehr weitergeholfen. Nun muss ich erstmal ein bissel testen, damit es irgendwann sitzt 😉

    @Th69 sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    Und gib deinem Projektverantwortlichen diesen als wichtig markierten Link: Windows Forms und Visual C++ MACHT KEINEN SINN! (und das gilt erst recht für die neueren VS Versionen, denn diese bieten schon lange keine Unterstützung mehr für WinForms mit C++/CLI).

    Die sind der Meinung das ich damit mehr Chancen auf dem Markt habe. (wegen C# und .Net sagen die)
    Ahnung von der Materie haben se och nicht, Rechner ohne Adminzugang, Web teilweise gesperrt usw

    @manni66 sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    Was wird denn gelehrt (bzw. in welcher Reihenfolge)?

    • new/delete oder make_unique/make_shared
    • new int[] oder std::vector<int>
    • for-Schliefe oder Algorithmen aus <algorithm>

    make_unique/make_shared, new int[], <algorithm> haben wir nicht durchgenommen. new/delete nur das der HEAP Speicher benutzt wird (Das da mehr dahinter steckt 😄 ) vector<int> nur als dynamisch erweiterbares Array, naja und einen roten Faden gab es auch nicht wirklich bzw eine Reihenfolge.

    Damit muss ich jetzt erstmal leben, und fleißig nebenbei mein Wissen aufbauen.


  • Administrator

    @MaikHo sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    Die sind der Meinung das ich damit mehr Chancen auf dem Markt habe. (wegen C# und .Net sagen die)

    Also C# und .Net wird wahrscheinlich tatsächlich mehr gesucht. Aber dann eben C# und .Net und nicht C++/CLI. Die Sprache C++/CLI ist eine völlig kleine Nische und wir nur in spezifischen Spezialfällen eingesetzt. Auf dem Arbeitsmarkt wird dir Wissen in C++/CLI so gut wie nichts bringen. Und C# programmiert sich massiv anders. Erst recht mit modernen Features der C# Sprache.

    make_unique/make_shared, new int[], <algorithm> haben wir nicht durchgenommen. new/delete nur das der HEAP Speicher benutzt wird (Das da mehr dahinter steckt 😄 ) vector<int> nur als dynamisch erweiterbares Array, naja und einen roten Faden gab es auch nicht wirklich bzw eine Reihenfolge.

    Wer hätte das erwartet, bei einem Kurs mit dem Namen C++ in 4 Wochen 😲 /s



  • @Dravere sagte in Verständnissfrage Objekte, Pointer, Anwenden (ja/nein), Hintergrundwissen .....:

    Wer hätte das erwartet, bei einem Kurs mit dem Namen C++ in 4 Wochen /s

    Naja, ein bissel mehr habe ich mir schon versprochen.

    Aber schön das ihr so hilfsbereit seit, Danke euch allen!


Log in to reply