NULL ポインターは、差し先を持たない特殊なポインター表現です。
C ではアドレス
0
で表現されたり、C++ では std::nullptr
、Java では null
、Objective-C では nil
など、言語によってさまざまな表現方法がありますが、Swift では一般的に、オプショナル型で表現したポインター型(たとえば T
型を扱う読み取り専用のポインターであれば UnsafePointer<T>?
)に nil
を代入することで表現します。NULL ポインターは一般にそれを使おうとするとランタイムエラーとして扱われるため、思いがけないところでプログラムの終了などの問題を生むことがあるため扱いが難しいですが、Swift ではオプショナル型を併用してそれを表現することで、NULL ポインターが混入するかもしれない場面では Swift による言語サポートが働いて、NULL ポインターかもしれない可能性を想定したコードを書くことが容易になり、全体的な安全性へとつながります。
let pointer: UnsafeMutablePointer<Int>? = UnsafeMutablePointer<Int>.allocate(capacity: 1)
:
// オプショナルバインディングにより、
// NULL ポインターの可能性も考慮したコードを書くことが可能
if let value = pointer?.pointee {
print("Value", value)
}
else {
print("NULL Pointer")
}
// オプショナルチェイニングにより、
// NULL ポインターでなければ、ポインターの解放を行うコードを的確に表現可能
pointer?.deallocate()

