此指针
这 指针是指针被标记 类、 struct或 联合 类型的非静态成员函数。它指向成员函数调用的对象。静态成员函数没有 这 指针。
this
this->member-identifier
备注
对象的 这 指针不是对象的一部分;它在一个 sizeof 语句的结果不反映有关对象的。相反,那么,当非静态成员函数对对象调用时,对象的地址传递编译器为隐藏的参数传递给函数。例如,以下函数调用:
myDate.setMonth( 3 );
可以解释示:
setMonth( &myDate, 3 );
对象的地址可从该成员函数的内部作为 这 指针。为 这 的大多数用途是隐式的。它是合法的,不过,不必要,显式使用 这 ,在引用类中的成员。例如:
void Date::setMonth( int mn )
{
month = mn; // These three statements
this->month = mn; // are equivalent
(*this).month = mn;
}
该表达式 *this 通常用于返回从成员函数的当前对象:
return *this;
这 指针还用于防止可以引用:
if (&Object != this) {
// do not execute in cases of self-reference
说明 |
---|
由于 这 指针无法更改,对 这 的分配不允许的。C++ 的早期阶段执行允许分配给 这。 |
例如有时, 这 指针直接使用 ),操作自引用数据结构,需要当前对象地址。
示例
// 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();
}