this
由于数组(std::vector<foo**>
) ,我想编写一行代码返回指向 的指针。我想过使用引用(&this
),但它没有用。
如果需要任何澄清,请告诉我。
编辑:为了澄清我在做什么,我试图直接使用数组访问对象。像这样:(*ARRAY.at(i))->foo("bar");
。有人说做指针是不可能的。如果是这样,我将如何使用数组直接访问对象?
您不能有指向 的指针this
,因为它不是变量,它是一个保留关键字,可转换为指向当前对象的指针。
在编译器实现中,可能有一个支持this
指针的函数的局部变量,但它是一个实现细节,程序员无法访问其地址。
你试图做的是非常邪恶的,但如果你真的想这样做,你将不得不自己创建变量:
foo** evil_ptr_to_ptr = new foo*(this);
ARRAY.push_back(evil_ptr_to_ptr);
并且在将来的某个时候,您将不得不将其删除:
// assuming you got all the elements in the array in the same way:
for(int i = 0; i < ARRAY.size(); ++i) {
delete ARRAY[i];
}
在 C++this
中不是左值。因此,无法创建指向this
. 出于同样的原因,也不可能将引用直接绑定到this
.
this 指针作为隐藏参数传递给所有非静态成员函数调用,并可作为所有非静态函数体内的局部变量使用。
因此,获取 this 指针的地址实际上是没有意义的。
考虑这个非静态成员函数:
void my_struct::my_func(int a);
当您在 my_struct 上调用它时,编译器会在后台执行此操作:
void my_struct__my_func(my_struct* this, int a);
鉴于 this 指针是按值传递的,获取它的地址将为您提供函数返回后将不再存在的地址。
正如其他回复/评论指出的那样,this
它本身就是一个指针。
即使您可以使用指向this
:的指针,this
它也是一个局部变量,是您正在运行的方法的局部变量,并且它是指向您正在使用的对象的指针。
返回指向的指针this
与返回指向任何其他局部变量的指针具有相同的效果:它将返回垃圾,因为您刚刚离开了this
定义的范围。
编辑:为了澄清我在做什么,我试图直接使用数组访问对象。像这样:(*ARRAY.at(i))->foo("bar");。有人说做指针是不可能的。如果是这样,我将如何使用数组直接访问对象?
Return this
,将其存储在您的数组中,然后像这样访问: myArray[idx]->foo("bar")
同样,this
是指向您的对象的指针。
编辑:我的立场得到纠正。this
是作为隐藏方法参数实现的右值表达式 - 它具有局部变量的生命周期。:)
你现在有很多正确的答案,但试着换个角度想一想:
foo
假设您在内存中的某个地址分配了您的类的对象。此地址this
在您的班级范围内有效地表示为。现在,你说你需要另一个地址来保存原始对象的地址。这个变量必须被声明并且拥有你的对象的生命周期;显然,默认情况下不存在这样的变量,因为创建一个变量没有太大意义。如果要保留foo**
在容器中,则很可能必须保留另一个容器foo*
,因此前者可以指向后者。好吧,再一次,这样做很可能没有意义,我想你应该以不同的方式解决你的问题?(您可能想在 SO 上提出问题并获得一些帮助。)