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

Метод dangling

Метод dangling класса NonNull создаёт висячий указатель, который указывает на выровненный адрес в памяти, но не ссылается на реально существующие данные. Такой указатель нельзя разыменовывать, но можно использовать для создания структур, которым требуется ненулевой указатель для обозначения отсутствия данных, например в связных списках или деревьях. Параметров метод не принимает.

Синтаксис

NonNull::<T>::dangling()

Пример

Давайте создадим висячий указатель на тип i32 и проверим его адрес:

use std::ptr::NonNull; fn main() { let ptr: NonNull<i32> = NonNull::dangling(); println!("{:?}", ptr); println!("{}", ptr.as_ptr() as usize); }

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

0x4

Пример

Давайте убедимся, что висячий указатель выровнен по границе типа u64:

use std::ptr::NonNull; use std::mem::align_of; fn main() { let ptr: NonNull<u64> = NonNull::dangling(); let addr = ptr.as_ptr() as usize; println!("{}", addr % align_of::<u64>() == 0); }

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

true

Пример

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

use std::ptr::NonNull; struct Node { value: i32, next: Option<NonNull<Node>>, } fn main() { let sentinel: NonNull<Node> = NonNull::dangling(); let empty: Option<NonNull<Node>> = None; println!("{:?}", sentinel); println!("{:?}", empty); }

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

0x4 None

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

  • класс NonNull,
    который представляет ненулевой указатель
  • метод as_ptr,
    который возвращает сырой указатель из NonNull
  • метод as_ref,
    который возвращает ссылку на данные из NonNull
  • функция null,
    которая создаёт нулевой сырой указатель
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить