What legitimate reasons exist to overload the unary operator&?

I seem to remember something like a smart pointer class which overrode operator& because it wanted to return the address of the contained pointer rather than the address of the smart pointer object. Can’t remember where I saw it or whether it seemed like a good idea at the time.

Aha, remembered: Microsoft’s CComPtr.

Edit: To generalize, it might make sense under the following conditions:

  • You have an object which is masquerading as some other object.
  • This object can obtain a pointer to the thing it’s masquerading as.

Returning anything other than a legitimate pointer would violate the principle of least astonishment.

Leave a Comment