dieser Zeiger

Der dies Zeiger ist ein Zeiger, der nur innerhalb der nicht statischen Memberfunktionen von Klasse, structoder Union-Typ zugegriffen werden kann.Es zeigt auf das Objekt, für das die Memberfunktion aufgerufen wird.Statische Memberfunktionen haben keinen dies Zeiger.

this 
this->member-identifier

Hinweise

dies Zeiger eines Objekts ist kein Bestandteil des Objekts selbst. Er wird nicht das Ergebnis einer sizeof-Anweisung für das Objekt aus.Stattdessen wenn eine nicht statische Memberfunktion für ein Objekt aufgerufen wird, wird die Adresse des Objekts vom Compiler als ausgeblendetes Argument für die Funktion übergeben.Ein Beispiel ist der folgende Funktionsaufruf:

myDate.setMonth( 3 );

Auf diese Weise interpretiert werden kann:

setMonth( &myDate, 3 );

Die Adresse des Objekts liegt außerhalb der Memberfunktion als dies Zeiger verfügbar.Meiste Verwendung von dies sind implizit.Es ist zulässig, obwohl nicht erforderlich, dies explizit zu verwenden, wenn es Member der Klasse verweist.Beispiele:

void Date::setMonth( int mn )
{
   month = mn;            // These three statements
   this->month = mn;      // are equivalent
   (*this).month = mn;
}

Der Ausdruck *this wird häufig verwendet, um das aktuelle Objekt aus einer Memberfunktion zurückgegeben wird:

return *this;

Der dies Zeiger wird auch verwendet, um anhand Selbstverweis zu schützen:

if (&Object != this) {
// do not execute in cases of self-reference
HinweisHinweis

Da der dies Zeiger nicht veränderbar ist, werden Zuweisungen zu dies nicht zulässig.In älteren Implementierungen von C++ diesZuweisungen zugelassen.

Gelegentlich wird der dies Zeiger direkt — beispielsweise verwendet, um auf sich selbst verweisen Datenstrukturen zu bearbeiten, in denen die Adresse des aktuellen Objekts benötigt wird.

Beispiel

// this_pointer.cpp
// compile with: /EHsc

#include <iostream>
#include <string.h>

using namespace std;

class Buf 
{
public:
    Buf( char* szBuffer, size_t sizeOfBuffer );
    Buf& operator=( const Buf & );
    void Display() { cout << buffer << endl; }

private:
    char*   buffer;
    size_t  sizeOfBuffer;
};

Buf::Buf( char* szBuffer, size_t sizeOfBuffer )
{
    sizeOfBuffer++; // account for a NULL terminator

    buffer = new char[ sizeOfBuffer ];
    if (buffer)
    {
        strcpy_s( buffer, sizeOfBuffer, szBuffer );
        sizeOfBuffer = sizeOfBuffer;
    }
}

Buf& Buf::operator=( const Buf &otherbuf ) 
{
    if( &otherbuf != this ) 
    {
        if (buffer)
            delete [] buffer;

        sizeOfBuffer =  strlen( otherbuf.buffer ) + 1; 
        buffer = new char[sizeOfBuffer];
        strcpy_s( buffer, sizeOfBuffer, otherbuf.buffer );
    }
    return *this;
}

int main()
{
    Buf myBuf( "my buffer", 10 );
    Buf yourBuf( "your buffer", 12 );

    // Display 'my buffer'
    myBuf.Display();

    // assignment opperator
    myBuf = yourBuf;

    // Display 'your buffer'
    myBuf.Display();
}
  

Siehe auch

Referenz

C++-Schlüsselwörter

Typ des Zeigers

Argument-Abgleichen und der dieser Zeiger