Ok. Facciamo il seguente esempio:
A a;
A b;
Sono state 'istanziati' due oggetti della classe A, per cui ognuno di essi avrà un puntatore 'this'. se ad esempio faccio:
a=b;
come detto prima questa istruzione viene vista come a.operator=(b), per cui essendo 'a' 'l'istanza di classe' utilizzata per chiamare 'operator=' , il puntatore 'this' sarà quello di 'a'. Al contrario 'b=a' viene vista come detto prima in 'b.operator=(a)' ed essendo 'b' 'l'istanza di classe' utilizzata per chiamare 'operator=' il puntatore 'this' sarà quello di 'b'. Mettiamola così, fra i tanti attributi che sono presenti in una classe, il compilatore ne aggiunge uno , di nome 'this' , che conterrà l'indirizzo in memoria dell'oggetto istanziato:
class A{
//vari costruttori, funzioi e variabili membro, ecc.
A *this; //aggiunta in automatico dal compilatore;
}
Quando poi viene definita una variabile di tipo A:
A a;
un'istanza di A viene allocata in memoria, e al puntatore 'this' viene assegnato l'indirizzo in memoria di tale istanza. Per cui per tutto il ciclo di vita della variabile di tipo A, nelle funzioni membro è possibile utilizzare tale puntatore per riferirsi all'istanza stessa, ad esempio come detto prima quando ci si tova nella situazione di nomi variabili uguali.
Speo che così le idee siano un po' più chiare.