Zuweisungsfrage



  • Hallo, also ein paar Fragen zum Theam Zuweisung.

    1. Nehmen wir mal an ich schreibe eine Stringklasse mit einem Konstruktor der ein char-array übernimmt und dieses als Wert für die Stringklasse festlegt:

    class String {

    public:
    String(char* string);
    private:
    char* value;
    };

    String::String(char* string) {
    value = string;
    }

    Also, könnte ich nun auf das value delete anwenden? Also wird implizit ein neues char-array mit new erstellt? Oder müsste ich wenn ich den Speicher irgendwann mal wieder freigeben will, erst explizit mit new ein array erstellen und dann die Werte für jedes Element zuweisen?

    2. Wenn jetzt value einen Wert hat und in irgendeiner Methode weise ich folgender Maßen einen neuen Wert zu

    value = paramterString;

    geh ich da richtig in der Annahme, dass der Speicher in dem der vorige Wert liegt, nicht freigegeben wird? Oder wird er dann freigegeben ohne dass ich es extra erledigen müsste?

    Danke!



  • es wird nichts "automatisch" getan, was mehrkosten verursacht und was du nicht willst.

    void foo (char *x) {
       char *y = x; //du kopierst nur die zeigeradresse. niemals die inhalte, wenn x ein C-String ist.
    }
    
    //Was du machen musst ist:
    
    void bar (const char *x) {
       char *y = new char[strlen(x)+1];
       strcpy (y, x);
    }
    

Anmelden zum Antworten