Why would anyone want to overload the & (address-of) operator?
Solution 1
If you're dealing with any sort of wrapper objects, you might want or need to transparently forward the access to the wrapper to the contained object. In that case, you can't return a pointer to the wrapper, but need to overload the address-of operator to return a pointer to the contained object.
Solution 2
Yes, for debugging (if you want to trace any access or reference, you might want to put a log line on any call to &
, *
or ->
).
Solution 3
Because they're evil and want you to suffer.
Or I guess if you are using proxy objects? I suppose you might want to return a pointer to the managed object instead of the container - although i'd rather do that with a getter function. Otherwise you'd have to remember to use things like boost::addressof
.
Related videos on Youtube
Tony the Pony
Updated on June 01, 2022Comments
-
Tony the Pony almost 2 years
Possible Duplicate:
What legitimate reasons exist to overload the unary operator& ?I just read this question, and I can't help but wonder:
Why would anyone possibly want to overload the
&
("address-of") operator?SomeClass* operator&() const { return address_of_object; }
Is there any legitimate use case?
-
Lightness Races in Orbit almost 13 years@Matti: We can flag for merge. That's better than duplicating the answers as well as the question.
-
Matti Virkkunen almost 13 years@Tomalak: Whoa. I didn't know that was possible.
-
Lightness Races in Orbit almost 13 years@Matti: I'm not 100% convinced that it is, but I've heard rumours... :)
-
-
Lightness Races in Orbit almost 13 yearsBinary operations with unary
&
? -
Thomas Berger almost 13 yearsI will look if i find the code again, then i'll post an example. Sounds strange, looks funny ( i think ugly) but maybe the author thought its nicer to use the
&
twice ;) -
curiousguy over 12 yearsI guess the point of a proxy object is that you don't know it's there. (Or you act as if you didn't knew.) In particular, you don't know about it's address. It's usually a temporary anyway.
-
underscore_d over 8 yearsHeh, I searched for "c++ overload address of" exactly to find out whether I can do this. Thanks for the extremely quick reassurance :-)
-
underscore_d over 8 yearsbecause why have it do something that makes sense, when you can instead do... that. :/