Sdílet prostřednictvím


this – ukazatel

Ukazatel this je ukazatel přístupný pouze v rámci nestatické členské funkce třídy, struktury (struct) nebo sjednocení.Odkazuje na objekt, pro který je volána členská funkce.Statické členské funkce nemají ukazatel this.

this 
this->member-identifier

Poznámky

Ukazatel this objektu není součástí objektu samotného, není zohledněn ve výsledku příkazu sizeof objektu.Namísto toho při volání nestatické členské funkce objektu, je adresa objektu kompilátorem předána funkci jako skrytý argument.Například, následující volání funkce:

myDate.setMonth( 3 );

lze interpretovat takto:

setMonth( &myDate, 3 );

Adresa objektu je v členské funkci k dispozici jako ukazatel this.Většina použití ukazatele this jsou implicitní.Je platné, i když ne nezbytné, explicitně zadat ukazatel this při odkazování na členy třídy.Příklad:

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

Výraz *this se běžně používá k vrácení aktuální objektu z členské funkce:

return *this;

Ukazatel this slouží také pro ochranu proti odkazu na sebe sama:

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

[!POZNÁMKA]

Protože nelze ukazatel this modifikovat, přiřazení do ukazatele this nejsou povolena.Starší implementace jazyka C++ umožňovaly přiřazení do ukazatele this.

V některých případech se ukazatel this používá přímo, například k manipulaci s datovými strukturami odkazující na sebe sama, kde je vyžadována adresa aktuálního objektu.

Příklad

// 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();
}
  

Viz také

Referenční dokumentace

Klíčová slova jazyka C++

Typ ukazatele this

Porovnávání argumentů a ukazatel this