ttwang@polyslo.CalPoly.EDU (Thomas Wang) (09/07/89)
When I write:
type_student* me = new type_student();
Is the address of 'me' guaranteed to be the same as the value of 'this'
for the 'me' object?
-Thomas Wang ("Ole wa onna da!!!"
- from Urusei Yatsura)
ttwang@polyslo.calpoly.edujima@hplsla.HP.COM (Jim Adcock) (09/12/89)
//> Wang:
//> When I write:
//>
//> type_student* me = new type_student();
//>
//> Is the address of 'me' guaranteed to be the same as the value of 'this'
//> for the 'me' object?
//Depends on what you consider the "address" of me, and what you consider the
//"me" object. I presume by the "me object" you mean the structure referred to
//by *me. Note that in C++ the object "me" is typically considered to be "me",
//not "*me." This is different from other object oriented languages which
//use pointers or handles for all objects. Similarly, I presume that by the
//"address of me" you mean the address of the underlying object pointed to
// by "me." In which case, consider:
#include <stdio.h>
class bogus_student
{
const char* name;
public:
bogus_student(const char* Name) : name(Name) {}
void print_name(){printf("I'm a student named %s, ",name);}
void print_addresses()
{printf("my this=%X but my address=%X\n", this, &(*this));}
bogus_student* operator&(){return (bogus_student*)0x1234;}
};
void main()
{
bogus_student& me = *(new bogus_student)("me");
me.print_name(); me.print_addresses();
bogus_student* me2 = new bogus_student("me2");
me2->print_name(); me2->print_addresses();
}
//Hopefully, people would not overload the address-of operator "&" in ways
//that will be incompatible with normal usage. Unfortunately, in reality
//they will. zweig@brutus.cs.uiuc.edu (Johnny Zweig) (09/12/89)
>//> Wang: >//> When I write: >//> >//> type_student* me = new type_student(); >//> >//> Is the address of 'me' guaranteed to be the same as the value of 'this' >//> for the 'me' object? Guaranteed not to be. &me would be the address of the pointer me. The VALUE stored in me has to be the same as the address of the type_student object, for example: type_student::f( type_student * p ) { printf("%x %x\n", this, p ); } will print the same number twice if you were to call me->f( me );. "this" is defined as a pointer to the object -- I imagine it would break a lot of code if somehow a pointer to object X and X.this couldn't be compared with == sensibly. -Johnny this