Зачем кому-то нужно перегружать оператор & (адрес)?
Возможный дубликат:
Какие законные причины существуют для перегрузки унарного оператора &?
Я просто прочитал этот вопрос, и я не могу не задаться вопросом:
Почему кто-то может захотеть перегрузить оператор &
( "адрес-из" )?
some_class* operator&() const { return address_of_object; }
Есть ли законный вариант использования?
Ответы
Ответ 1
Если вы имеете дело с любыми объектами-оболочками, вам может понадобиться или нужно прозрачно перенаправить доступ к обертке содержащемуся объекту. В этом случае вы не можете вернуть указатель на оболочку, но вам нужно перегрузить оператор-адрес, чтобы вернуть указатель на содержащийся объект.
Ответ 2
Да, для отладки (если вы хотите отслеживать любой доступ или ссылку, вы можете поместить строку журнала при любом вызове &
, *
или ->
).
Ответ 3
Потому что они злые и хотят, чтобы вы страдали.
Или я думаю, если вы используете прокси-объекты? Я полагаю, вы можете захотеть вернуть указатель на управляемый объект вместо контейнера, хотя я бы скорее сделал это с помощью функции getter. В противном случае вам придется не забывать использовать такие вещи, как boost::addressof
.
Ответ 4
Я уже видел это в продуктивном коде.
Но там было возвращено двоичное представление содержимого a struct
, а не только 0
.
И усеказа была простой: двоичные операции.