引用和指针类型
引用(类似其它编程语言中的指针)是引入多对一关系的方式。这表示不同的引用可以指向和修改相同的内存位置。
Nim区分 被追踪 和 未追踪 引用。未追踪引用也被称为 指针 。追踪的引用指向垃圾回收堆里的对象,未追踪引用指向手动分配对象或内存中其它地方的对象。因此未追踪引用是 不安全的 。 为了某些低级的操作(例如,访问硬件),未追踪的引用是必须的。
追踪的引用用 ref 关键字声明;未追踪引用用 ptr 关键字声明。
空 [] 下标标记可以用来 解引用 一个引用,表示获取引用指向的内容。 . (访问一个元组/对象字段操作符)和 [] (数组/字符串/序列索引操作符)操作符为引用类型执行隐式解引用操作:
- type
- Node = ref object
- le, ri: Node
- data: int
- var
- n: Node
- new(n)
- n.data = 9
- # 不必写n[].data; 实际上n[].data是不提倡的!
为了分配一个新追踪的对象,必须使用内置过程 new 。 为了处理未追踪内存, 可以用 alloc, dealloc 和 realloc 。 system 模块文档包含更多细节。
如果一个引用指向 nothing, 它的值是 nil 。