【发布时间】:2026-02-21 13:15:01
【问题描述】:
标准库的链表Nodeuses the Option type:
struct Node<T> {
next: Option<NonNull<Node<T>>>,
prev: Option<NonNull<Node<T>>>,
element: T,
}
并使用以下代码创建一个节点:
Node {
next: None,
prev: None,
element,
}
BTree的LeafNode的实现,标准库uses a raw pointer for the parent node:
struct LeafNode<K, V> {
parent: *const InternalNode<K, V>,
parent_idx: MaybeUninit<u16>,
len: u16,
keys: MaybeUninit<[K; CAPACITY]>,
vals: MaybeUninit<[V; CAPACITY]>,
}
并创建新的叶节点by setting parent to ptr::null:
LeafNode {
keys: MaybeUninit::uninitialized(),
vals: MaybeUninit::uninitialized(),
parent: ptr::null(),
parent_idx: MaybeUninit::uninitialized(),
len: 0
}
我们可以用nullptr在C++中实现上面的代码,那么Option和std::ptr::null()代表空指针有什么区别呢?表示空指针的推荐方式是什么?
【问题讨论】:
-
你问的是
Option<NonNull<T>>和*mut T的区别吗? -
@E_net4wisheshappyholidays 我的意思是,Option和std::ptr::null()实现nullptr有什么区别,推荐哪种方式实现nullptr?