是否可以从该类的构造函数中获取新实例化类的内存分配地址?
我正在开发一个链表,其中多个类有多个指向类的指针。每次新类实例化时,都需要检查其父级列表以确保它包含在内。
如果我尝试做这样的事情:
MyClass() // constructor
{
extern MyClass * pParent;
for ( int i = 0; i < max; i++ )
{
pParent->rels[i] == &MyClass; // error
}
}
我收到此错误:
错误C2275:'namespace :: MyClass':非法使用此类型作为表达式
任何想法或建议将不胜感激。感谢。
答案 0 :(得分:7)
您正在寻找this
。
答案 1 :(得分:6)
你的意思是:
pParents->rels[i] = this;
答案 2 :(得分:2)
如果您编写一个实例方法,例如:
void MyClass::foo(some params);
编译器向方法添加一个特殊参数,通过该方法传递实例的地址。你可以想象,编译器不是上面的签名,而是创建这样的东西:
//this is pseudocode
void MyClass::foo(MyClass * const this, some params);
这是其中一个原因,例如,为什么你不能直接将实例方法作为回调传递。
在任何实例方法的主体中,您可以使用特殊关键字 this 作为实例的const指针。
静态方法没有获得指针,因此您无法在其定义中使用此关键字。
如果您创建类似的const方法:
class MyClass
{
void foo(some params);
void foo(some params) const;
}
就像有第二种方法
//this is pseudocode
void MyClass::foo(const MyClass * const this, some params);
并且编译器可以根据调用该方法的对象的常量进行重载决策