РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
667 of 815 menu

Функция addressof

Функция addressof возвращает действительный адрес объекта в памяти. Её главная особенность заключается в том, что она работает корректно даже в том случае, если для типа объекта переопределён оператор взятия адреса operator&. В единственный параметр мы передаём ссылку на объект, адрес которого необходимо получить. Функция возвращает указатель на этот объект.

Синтаксис

#include <memory> std::addressof(obj)

Пример

Давайте получим адрес обычной переменной и выведем его на экран:

#include <iostream> #include <memory> using namespace std; int main() { int num = 42; int* ptr = std::addressof(num); cout << *ptr << endl; return 0; }

Результат выполнения кода:

42

Пример

Давайте рассмотрим случай, когда в классе переопределён оператор operator&. Обычное взятие адреса вернёт подставное значение, а addressof - настоящий адрес:

#include <iostream> #include <memory> using namespace std; struct Obj { int value = 5; Obj* operator&() { return nullptr; } }; int main() { Obj obj; cout << &obj << endl; cout << std::addressof(obj) << endl; return 0; }

Результат выполнения кода:

0 "0x7ffee4b8c9a0"

Первый вывод равен 0, так как сработал переопределённый оператор. Второй вывод - это реальный адрес объекта в памяти (значение может отличаться при каждом запуске).

Смотрите также

  • функция construct_at,
    которая создаёт объект по указанному адресу
  • функция destroy_at,
    которая разрушает объект по указанному адресу
  • функция launder,
    которая получает корректный указатель на объект
  • оператор new,
    который выделяет память под объект
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить