Share via


este puntero

El puntero de this es un puntero accesible dentro de las funciones miembro no estáticas de clase, de struct, o tipo de union .Elija el objeto para el que se llama a la función miembro.Las funciones miembro static no tienen un puntero de this .

this 
this->member-identifier

Comentarios

El puntero de this de un objeto no forma parte del propio objeto; no se refleja en el resultado de una instrucción de sizeof en el objeto.En su lugar, cuando una función miembro no estática se llama para un objeto, el compilador pasa la dirección del objeto como 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 disponible dentro de la función miembro como el puntero de this .La mayoría de los usos this están implícitamente.Es válido, aunque innecesario, explícitamente utilizar this al hacer 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 devolver el objeto actual de una función miembro:

return *this;

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

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

[!NOTA]

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

En ocasiones, utilizan el puntero de this directamente (por ejemplo, para manipular las estructuras de datos de autorreferencia, 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 este puntero

La coincidencia de argumento y el puntero this