C++ 一个类';是否从构造函数中确定内存分配地址?

C++ 一个类';是否从构造函数中确定内存分配地址?,c++,class,instantiation,C++,Class,Instantiation,是否可以从新实例化的类的构造函数中获取该类的内存分配地址? 我正在开发一个链表,其中多个类有多个指向类似类的指针。每次一个新类实例化时,它都需要检查其父类的列表以确保它被包括在内 如果我尝试这样做: MyClass() // constructor { extern MyClass * pParent; for ( int i = 0; i < max; i++ ) { pParent->rels[i] == &MyClass; // erro

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

如果我尝试这样做:

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

   for ( int i = 0; i < max; i++ )
   {
      pParent->rels[i] == &MyClass; // error
   }
}
//this is pseudocode
void MyClass::foo(MyClass * const this, some params);
MyClass()//构造函数
{
外部我的班级*P租金;
对于(int i=0;irels[i]=&MyClass;//错误
}
}
我得到这个错误:

错误C2275:“命名空间::MyClass”:将此类型非法用作表达式

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

你的意思是:

pParents->rels[i] = this;
你的意思是:

pParents->rels[i] = this;

您正在查找
this

如果您编写一个实例方法,例如:

void MyClass::foo(some params);
编译器向传递实例地址的方法添加一个特殊参数。您可以想象,编译器不是创建上面的签名,而是创建如下内容:

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

   for ( int i = 0; i < max; i++ )
   {
      pParent->rels[i] == &MyClass; // error
   }
}
//this is pseudocode
void MyClass::foo(MyClass * const this, some params);
例如,这就是为什么不能将实例方法直接作为回调传递的原因之一

在任何实例方法的主体中,都可以使用一个特殊的关键字this作为指向实例的常量指针

静态方法无法获取该指针,因此不能在其定义中使用this关键字

如果创建一个const方法,如:

class MyClass
{
    void foo(some params);
    void foo(some params) const;
}
就像有第二种方法一样

//this is pseudocode
void MyClass::foo(const MyClass * const this, some params);

若您编写了一个实例方法,编译器可以根据调用该方法的对象的常量来进行重载解析,例如:

void MyClass::foo(some params);
编译器向传递实例地址的方法添加一个特殊参数。您可以想象,编译器不是创建上面的签名,而是创建如下内容:

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

   for ( int i = 0; i < max; i++ )
   {
      pParent->rels[i] == &MyClass; // error
   }
}
//this is pseudocode
void MyClass::foo(MyClass * const this, some params);
例如,这就是为什么不能将实例方法直接作为回调传递的原因之一

在任何实例方法的主体中,都可以使用一个特殊的关键字this作为指向实例的常量指针

静态方法无法获取该指针,因此不能在其定义中使用this关键字

如果创建一个const方法,如:

class MyClass
{
    void foo(some params);
    void foo(some params) const;
}
就像有第二种方法一样

//this is pseudocode
void MyClass::foo(const MyClass * const this, some params);

编译器可以根据调用该方法的对象的常量来解决重载问题

我很困惑,听起来你们想要
这个
指针。dreamlax,请回答。我的猜测是,这是一个正确的答案。@dreamlax,谢谢!这正是我想要的。请加上它作为答案,我会接受的。通常,我为微控制器写嵌入式C,所以C++中的一些特殊关键字对我来说是新的。我还是困惑了为什么你会想这么做。为什么一个新分配的对象的地址在另一个对象中已经是已知的(除了一些邪恶的bug)?其他实例仅在构造函数完成后从
new
等处获取。我很困惑,听起来您想要
这个
指针。dreamlax,请回答。我的猜测是,这是一个正确的答案。@dreamlax,谢谢!这正是我想要的。请加上它作为答案,我会接受的。通常,我为微控制器写嵌入式C,所以C++中的一些特殊关键字对我来说是新的。我还是困惑了为什么你会想这么做。为什么一个新分配的对象的地址在另一个对象中已经是已知的(除了一些邪恶的bug)?其他实例仅在构造函数完成后从
new
等处获取。比较与赋值并不重要。我两者都用。谢谢。请注意,从构造函数中传递
这个
被认为是一种不好的形式,因为在构造函数退出之前,不能保证完全构造实例。尤其要注意涉及虚拟函数的使用(直接或间接)。由于纯粹的虚拟方法调用,这可能是一条非常快的死亡之路。比较与分配其实并不重要。我两者都用。谢谢。请注意,从构造函数中传递
这个
被认为是一种不好的形式,因为在构造函数退出之前,不能保证完全构造实例。尤其要注意涉及虚拟函数的使用(直接或间接)。由于纯粹的虚拟方法调用,这可能是一条非常快的死亡之路。我以为他在寻找它。我以为他在寻找它。