我有一个名为Area
的类,当我创建一个Area对象时,我需要保留它的地址。所以在Area的构造函数中我使用以下命令:
Area *p = this->Area;
我得到一个错误说:
“无效使用Area :: Area”。
知道出了什么问题?
答案 0 :(得分:1)
this
已经是指向该对象的指针。所以你应该做这样的事情:
Area *p = this;
this
指针是所有成员函数(非静态成员)的隐式参数。因此,在成员函数内部,这可以用于引用调用对象。
答案 1 :(得分:0)
我创建了一个我需要保留其地址的Area对象。
可以在ctor的初始化列表中初始化self-reference和self-ptr。 (并且在方法中也很容易)
class Area
{
private:
Area& selfRef; // size is 8 bytes
Area* selfPtr; // size is 8 bytes - but why bother, just use this
char data[1000]; // size is 1000 bytes
public:
Area() : selfRef(*this), selfPtr(this)
{
for (int i=0; i<1000; ++i) data[i] = 0; // initialize data
};
void foo() {
// easy to do in a method:
Area& localSelfRef = *this; // 8 bytes
// ...
localSelfRef.bar(); // instead of ptr
this->bar(); // direct use of this ptr
selfRef.bar(); // use of class initialized selfRef
}
void bar() {
// ...
}
}
班级大小是1000多字节。
selfPtr和SelfRef以及localSelfRef每个都是8个字节(在我的系统上)。