2011-04-18 4 views
2

Моя цель - написать функцию, которая возвращает адрес экземпляра класса, из которого он вызывается.Адрес и этот экземпляр класса?

Моя первоначальная догадка

возвращение & это

Но это не дает хороших результатов.

Любые предложения приветствуются! Благодаря!

ответ

6

Просто return this вернет адрес объекта из этого объекта.

+0

Ха-ха, не может быть проще! Благодаря! Думаю, я думал, что это вернет экземпляр класса по копиям, но это явно не имеет смысла. – icz

+0

Предполагаю, что вы уже подумали об этом, но вы делаете 'this-> function()' so 'this', представляющий указатель, имеет смысл –

1

Это указатель. Вы не хотите адрес этого указателя, вы хотите это самому.

Обратите внимание, что при виртуальном наследовании (виртуальных базовых классах, множественном наследовании) этот указатель может быть не всегда одинаковым (он будет зависеть от того, где на графике наследования он указывает на конкретный момент времени) ,

Ну определенные преобразования существуют (dynamic_cast), так что никаких неразрешимых проблем там, просто сказать, что вы не должны слепо верить, что

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

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

test не нужно всегда быть правдой (я думаю, что это даже зависит от компилятора, т.е. конкретная реализация, что происходит, когда).

+0

' this' даже не имеет адреса, это значение rvalue. – fredoverflow

+0

@Fred: Да, я думаю, это то, что я искал, чтобы выразить словами. Я просто счастлив, что на самом деле я не сказал, что «это» был адресом :) (хотя на практике я не знаю компилятора, в котором он не является, по крайней мере, каким-то необработанным адресом под обложками; Теперь для 'member-function-pointers' ... Это аналогичная история: это не адрес, _and_ он обычно не реализован как таковой. – sehe

Смежные вопросы