Partager via


Pointeur this

Le pointeur this est accessible uniquement dans les fonctions membres non statiques de type classe, struct ou union. Il pointe vers l'objet pour lequel la fonction membre est appelée. Les fonctions membres statiques n'ont pas de pointeur this.

this 
this->member-identifier

Notes

Le pointeur this d'un objet ne fait pas partie de l'objet lui-même ; il n'est pas répercuté dans le résultat d'une instruction sizeof sur l'objet. En revanche, lorsqu'une fonction membre non statique est appelée pour un objet, l'adresse de l'objet est passée par le compilateur comme argument masqué à la fonction. Par exemple, l'appel de fonction suivant :

myDate.setMonth( 3 );

peut être interprété de cette façon :

setMonth( &myDate, 3 );

L'adresse de l'objet est disponible à partir de la fonction membre en tant que pointeur this. La plupart des utilisations de this sont implicites. Il est permis, bien qu'inutile, d'utiliser explicitement this lorsqu'il est fait référence aux membres de la classe. Par exemple :

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

L'expression *this est utilisée couramment pour retourner l'objet actuel d'une fonction membre :

return *this;

Le pointeur this est également utilisé pour la protection contre les autoréférences :

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

Notes

Le pointeur this étant non modifiable, les assignations à this ne sont pas autorisées.Les implémentations précédentes de C++ autorisaient les assignations à this.

Parfois, le pointeur this est utilisé directement (par exemple, pour manipuler les structures de données auto-référentielles, où l'adresse de l'objet actif est requise).

Exemple

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

Voir aussi

Référence

Mots clés C++

Type de pointeur this

Argument correspondant et pointeur this