引用和指针类型

引用(类似其它编程语言中的指针)是引入多对一关系的方式。这表示不同的引用可以指向和修改相同的内存位置。

Nim区分 被追踪 和 未追踪 引用。未追踪引用也被称为 指针 。追踪的引用指向垃圾回收堆里的对象,未追踪引用指向手动分配对象或内存中其它地方的对象。因此未追踪引用是 不安全的 。 为了某些低级的操作(例如,访问硬件),未追踪的引用是必须的。

追踪的引用用 ref 关键字声明;未追踪引用用 ptr 关键字声明。

[] 下标标记可以用来 解引用 一个引用,表示获取引用指向的内容。 . (访问一个元组/对象字段操作符)和 [] (数组/字符串/序列索引操作符)操作符为引用类型执行隐式解引用操作:

  1. type
  2. Node = ref object
  3. le, ri: Node
  4. data: int
  5. var
  6. n: Node
  7. new(n)
  8. n.data = 9
  9. # 不必写n[].data; 实际上n[].data是不提倡的!

为了分配一个新追踪的对象,必须使用内置过程 new 。 为了处理未追踪内存, 可以用 alloc, deallocreallocsystem 模块文档包含更多细节。

如果一个引用指向 nothing, 它的值是 nil