this (Puntero)

El puntero this es un puntero accesible solo dentro de las funciones miembro no estáticas de un tipo de clase, struct o de unión. Señala al objeto para el que se llama a la función miembro. Las funciones miembro estáticas no tienen un puntero this.

this 
this->member-identifier

Comentarios

El puntero this de un objeto no forma parte del propio objeto; no se refleja en el resultado de una instrucción sizeof en el objeto. En su lugar, cuando se llama a una función miembro no estática para un objeto, el compilador pasa la dirección del objeto como un argumento oculto a la función. Por ejemplo, la siguiente llamada de función:

myDate.setMonth( 3 );

se puede interpretar de esta manera:

setMonth( &myDate, 3 );

La dirección del objeto está disponible desde la función miembro como el puntero this. La mayoría de los usos de this son implícitos. Es válido, aunque innecesario, utilizar explícitamente this cuando se hace referencia a los miembros de la clase. Por ejemplo:

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

La expresión *this suele utilizarse para devolver el objeto actual desde una función miembro:

return *this;

El puntero this también se utiliza para protegerse de la autorreferencia:

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

Nota

Dado que el puntero this no es modificable, no se permiten las asignaciones a this.Implementaciones anteriores de C++ permitían las asignaciones a this.

En ocasiones, el puntero this se utiliza directamente; por ejemplo, para manipular estructuras de datos que hacen referencia a sí mismas, donde se requiere la dirección del objeto actual.

Ejemplo

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

Vea también

Referencia

Palabras clave de C++

Tipo de puntero this

Coincidencia de argumentos y el puntero this