Führen eines Gegenstandes durch Zeiger zu einer Funktion



  • Hallo jeder, möchte ich wissen, warum der folgende vereinfachte Code nicht das erwartete (durch mich) Resultat erbringt.

    #include <iostream>
    
    class IntObject
    {
    public:
        IntObject(int aa) : a(aa) {};
        int a;
    };
    
    void
    f(IntObject *object)
    {
        if (!object) {
            object = new IntObject(0);
        } else {
            (object->a)++;
        }
        std::cout << "object->a = " << object->a << std::endl;
    };
    
    int
    main()
    {
        IntObject *object1 = 0;
        std::cout << object1 << std::endl;
        f(object1);
        std::cout << object1 << std::endl; // Why is object1 still nil ???
        //std::cout << object1->a << std::endl;
    
        IntObject *object2 = new IntObject(42);
        std::cout << object2 << std::endl;
        f(object2);
        std::cout << object2 << std::endl;
        std::cout << object2->a << std::endl;
    
        return 0;
    };
    

    Beifall,
    kasswert



  • wegen call by value



  • oder etwas ausfuehrlicher:

    du uebergibst einen zeiger auf ein objekt per wert, dieser wert wird dann geaendert, wird allerdings geloescht sobald du aus der funktion raus kommst(-> speicher von dem neuem objekt wird nicht freigegeben).

    uebergebe der funktion eine referenz auf den zeiger und dann wir es funktionieren. und du hast auch die moeglichkeit von auserhalb der funktion den speicher wieder frei zu geben.



  • also übergib eine referenz auf den zeiger.
    IntObjekt * & blub





  • sehr gut mitgedacht


Anmelden zum Antworten