2011-04-18 64 views
2

我的目标是编写一个函数,它返回调用它的实例化类的地址。&此实例化类的地址?

我最初的猜测是

回报&这

但是,这不会产生任何好的结果。

任何和所有的建议非常感谢!谢谢!

回答

6

只需return this将返回该对象内的对象的地址。

+0

哈哈,再简单不过了!谢谢!我想我认为那会通过复制返回实例化的类,但这显然没有意义。 – icz 2011-04-18 23:07:35

+0

我想你已经想到了这一点,但你做'this-> function()'所以'this'代表一个指针有意义 – 2011-04-18 23:11:18

1

这是一个指针。你不想要这个指针的地址,你想要它自己。

请注意,在虚拟继承(虚拟基类,多重继承)下,这个指针可能在任何时候都不一样(这取决于它指向特定时间点的继承图中的哪个位置) 。

好定义的转换确实存在(dynamic_cast的),这样就没有不能解决的问题,只是说,你不应该盲目相信

MultiplyDerived* d = &someInstance; 
Base* b = d; 

bool test = ((void*) b) == ((void*) d); 

test不一定总是正确的(我认为它甚至编译器相关,即执行具体发生什么时)。

+0

'this'甚至没有地址,它是一个右值。 – fredoverflow 2011-04-19 05:39:03

+0

@Fred:是的,我想这就是我想要用语言表达的东西。我很高兴我没有真正说过这是一个地址:)(尽管在实践中,我不知道任何编译器,它至少不是某种形式的原始地址;现在为'成员函数指针'...这是一个类似的故事:这不是一个地址,并且它通常也不是这样实现的。 – sehe 2011-04-19 06:25:11