Pointer zwischenspeichern und Inhalt verändern



  • Ich übergebe an eine Klasse einen Pointer im Konstruktor, der dann in einem Attribut des Objektes gespeichert wird. Irgendwie möchte ich es schaffen, dass eine Veränderung des dereferenzierten Wertes hinter diesem Attribut-Zeiger irgendwann in dieser Klasse dann auch "draußen" in Effekt tritt. Folgendes geht da natürlich nicht:

    void *ptr; // Teil der Klassendeklaration
    ptr = inputPtr; // im Konstruktor gesetzt
    
    // in einer verändernden Methode
    delete[] ptr;
    ptr = new char[length];
    

    Man sieht natürlich hier, dass bei der Aktion der Zeiger verändert wird, anstatt dass der Zeiger innen und derselbe draußen auf einen neuen Wert zeigen würden.

    Wie also macht man so was? Einfach noch eine Ebene Zeiger draufsetzen? Das löst aber doch das Problem nicht, denn dann bleibt vielleicht der Wert des obersten Zeigers gleich, aber der Wert des relevanten Zeigers ändert sich trotzdem.

    Den void-Pointer benutze ich zudem, weil ich mit der Klasse sowohl float, int, char*, als auch selbst erstellte Objekte erreichen will. Da geht das am einfachsten, dachte ich mir.



  • David Schneider schrieb:

    ...dass eine Veränderung des dereferenzierten Wertes hinter diesem Attribut-Zeiger irgendwann in dieser Klasse dann auch "draußen" in Effekt tritt. ...

    Bist du dir sicher, dass du dereferenzieren meinst? Dein Beispiel sieht mehr so aus, als ob du nen Pointer auf nen Pointer brauchst.

    Den void-Pointer benutze ich zudem, weil ich mit der Klasse sowohl float, int, char*, als auch selbst erstellte Objekte erreichen will.

    Mit Templates hast du wahrscheinlich auch noch nix gemacht.

    Schau dir mal std::vector an.



  • Das ist wahrscheinlich, was ich meinte. So oder so: Ich möchte eigentlich, dass ich innerhalb der Klasse einen Zeiger auf eine Variable speichere, deren Wert ich dann verändern kann, ohne dass der Zeiger sich ändert. Außerdem soll der Zeiger drinnen immer gleich dem draußen sein (d.h. wenn ich drinnen die Variable verändere, weil ich zum Beispiel ein char-Array lösche und ein neues bestelle), damit ich draußen wie drinnen gescheit auf die drinnen veränderte Variable zugreifen kann.

    Ich dachte auch schon an einen Zeiger auf einen Zeiger. Im Gegensatz zur einfach verzeigerten Variante stürzt das allerdings bei mir ab. Da müsste ich mich dann jetzt auf Fehlersuche begeben.


Log in to reply