Gibt es die Möglichkeit *this auszugeben?



  • Der *this eines Objektes zeigt ja immer auf sich selbst. Kann ich diesen *this auch irgendwie sichtbar machen, also ausgeben? Mit cout hatte ich kein Glück, der kann damit nix anfangen.



  • Ich verstehe dein Problem nicht. Natürlich kannst du *this ausgeben, vorausgesetzt, dass eine entsprechende Überladung des operator<< existiert...

    Eine Fehlermeldung wäre auch schön.



  • Sone schrieb:

    Ich verstehe dein Problem nicht. Natürlich kannst du *this ausgeben, vorausgesetzt, dass eine entsprechende Überladung des operator<< existiert...

    p0wned, h4x0r 😉

    Butterbrot schrieb:

    Mit cout hatte ich kein Glück, der kann damit nix anfangen.

    Dann hast was falschgemacht.

    #include <iostream>
    
    struct foo_t {
    	void print_this() {
    		std::cout << this << '\n';
    	}
    };
    
    int main()
    {
    	foo_t foo;
    	foo.print_this();
    }
    


  • edit: hier stand Müll ^^



  • Oh ja ich wollte *this ausgeben und habe this gar nicht probiert^^

    Danke nun geht es.

    EDIT: Es ging mir nur darum mit Kopiekonstruktor, Zuweisungoperator und so etwas rumzuspielen und mir anzugucken wann welche Objekte erzeugt werden. Achja jetzt kommt ja noch die Move-Geschichten dazu, das muss ich auch noch verinnerlichen.



  • Swordfish schrieb:

    #include <iostream>
    
    struct foo_t {
    	void print_this() {
    		std::cout << this << '\n';
    	}
    };
    
    int main()
    {
    	foo_t foo;
    	foo.print_this();
    }
    

    Besser mit const und cast auf void*, da die Ausgabe des Pointers überladen sein kann:

    #include <iostream>
    
    struct foo_t {
        void print_this( std::ostream& out ) const {
            out << static_cast< const void* >( this );
        }
    };
    
    std::ostream& operator<<( std::ostream& out, const foo_t* p )
    {
        return out << "foo_t*(" << static_cast< const void* >( p ) << ")";
    }
    
    int main()
    {
        using std::cout;
        foo_t foo;
        foo.print_this( cout << "this: " );
        cout << "\n";
        cout << "Pointer: " << &foo << "\n";
    }
    

Anmelden zum Antworten