Verständnisproblem Referenzen



  • Hallo, hab ein Verständnisproblem mit Referenzen.
    Hier mal ein Beispiel:

    #include <iostream>
    using namespace std;
    
    class foo
    {
    private:
    string foo_name;
    public:
    void set_name(string &name)
    {
       foo_name=name;
    }
    string &get_name()
    {
       return foo_name;
    }
    };
    
    foo test[2];
    
    int main(int argc, char* argv[])
    {
       string a;
       a="Juergen";
       test[0].set_name(a);
       a="Heinz";
       test[1].set_name(a);
       cout << test[0].get_name() << endl << test[1].get_name();
       getch();
       return 0;
    }
    

    Ich habe dort im main den "string a" der irgendwo im Speicher liegt.-)
    Dann übergebe ich mit der Methode "set_name" eine Referenz auf "string a" und weise somit "foo_name" vom Objekt "foo[0]" auf die Adresse im Speicher wo "string a" (main) liegt.
    Dann ändere ich "string a" und mache das selbe bei "foo[1]".
    Ich übergebe doch beide male die Adresse von "string a".Dann müssten doch in beiden Objekten in "foo_name" der Name "Heinz" stehen, oder ????
    Hoffe hab mich halbwegs verständlich ausgedrückt.



  • das siehst du glaube ich nicht richtig, da du zwar eine Referenz übergibst, aber string den Zuweisungs-operator überschreibst sodass:

    string a,b;
    a = "hallo";
    b = a;
    

    b enthält jetzt den Inhalt von a, aber b ist immer noch ein eigenes Objekt mit einer eigenen Addresse im Speicher. Würde die String-Klasse den Zuweisungsoperator nicht überschreiben, würde es zu einen memory-leak kommen, also das objekt b würde nicht zerstört werden.



  • Hallo

    du müßtest also auch innerhalb der Klasse mit Referenzen bzw. Pointern arbeiten, nicht nur als Übergabeparameter.

    bis bald
    akari


Anmelden zum Antworten