如何从构造函数中确定类的内存分配地址?

时间:2010-04-27 21:42:19

标签: c++ class instantiation

是否可以从该类的构造函数中获取新实例化类的内存分配地址?
我正在开发一个链表,其中多个类有多个指向类的指针。每次新类实例化时,都需要检查其父级列表以确保它包含在内。

如果我尝试做这样的事情:

MyClass() // constructor
{
   extern MyClass * pParent;

   for ( int i = 0; i < max; i++ )
   {
      pParent->rels[i] == &MyClass; // error
   }
}

我收到此错误:

  

错误C2275:'namespace :: MyClass':非法使用此类型作为表达式

任何想法或建议将不胜感激。感谢。

3 个答案:

答案 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);

并且编译器可以根据调用该方法的对象的常量进行重载决策