Bedeutung//Kosten von Dereferenzierung



  • Hallo,

    mir ist gerade eine Frage aufgestossen, und zwar kann man ja ohne das
    der compiler meckert, oder hinweise gibt zwei funktionen definieren

    class GrosseDatenMenge
    {
    };
    
    class Test
    {
    
    void bearbeite(const GrosseDatenMenge * arg);
    
    void bearbeite(const GrosseDatenMenge& arg);
    };
    

    nun sagen wir, ich habe grade nur den Pointer zur Hand und
    rufe das ganze so auf :

    GrosseDatenMenge * nix;
    bearbeite(*nix);
    

    Kann mir mal wer erklären, was bei der Dereferenzierung passiert?
    Ich weiss das man operator * überschreiben kann, hab das aber noch nie
    gemacht, also immer den vordefinierten benutzt.
    Kann es bei solchem Vorgehen zu unsinnigen Kopien kommen?
    Sollte man da aufpassen?



  • http://www.parashift.com/c++-faq-lite/operator-overloading.html
    Bist du dir sicher, dass du mit operator* nicht einen anderen Operator überlädst (Multiplikation ...)?



  • (D)Evil schrieb:

    http://www.parashift.com/c++-faq-lite/operator-overloading.html
    Bist du dir sicher, dass du mit operator* nicht einen anderen Operator überlädst (Multiplikation ...)?

    wie gesagt, habe ich diesen operator noch NIE überladen,
    ich weiss nur das es geht (smart-pointer)

    deshalb frage ich mich ja, ob es fälle gibt, wo sowas extrem
    laufzeit kosten kann, eigentlich nur für den vordefinierten fall



  • Ob eine Kopie angelegt wird hängt von deiner Funktion ab (ob Referenz oder by-value) und nicht vom Dereferenzieren. Referenzen sind ja (meist, je nach Compiler) auch nur Pointer.

    Und aufpassen sollte man eigentlich immer.


Anmelden zum Antworten