- 配列のアドレス的一致を検証するときに作った関数が間違えていた。
- 作ったのは
func action(value: UnsafePointer<Int>)
だったけれど、意図していたのはfunc action(value: UnsafePointer<Array<Int>>)
だった。 - これにより、素直にポインターの内部バッファーが渡されていたため、一致していたようだ。
- これは C 相互運用の挙動によるところらしい。
- つまり、図らずして Copy-On-Write 対象のバッファーが得られたようだ。
- 本来の意図していた方に直したところ、別の変数に入れ直した時点で違うアドレスを差していた。
- 結果、Array だけ特別視してガワを作っているのではなく、ポインター変換のときに特別な計らいがされていると見れそう。