2017-10-18 7 views
0

UnsafeMutablePointerのインスタンスが与えられた場合、をdeallocate(capacity:)の直前に呼び出す点は何ですか?Swift UnsafeMutablePointer:割り当てを解除する前に初期化解除を呼び出す必要がありますか?

deallocate(capacity:)に電話することはできませんか?


セクションを読んだとき、私はraywenderlich.comに記事Unsafe Swift: Using Pointers And Interacting With Cの「型付きポインタを使用した」これを見ました。

この記事には、以下のコードが含まれています。これをXcodeの新しいプレイグラウンドに追加できます。あなたが読んでおく場合

let count = 2 
let stride = MemoryLayout<Int>.stride 
let alignment = MemoryLayout<Int>.alignment 
let byteCount = stride * count 

do { 
    print("Typed pointers") 

    let pointer = UnsafeMutablePointer<Int>.allocate(capacity: count) 
    pointer.initialize(to: 0, count: count) 
    defer { 
    pointer.deinitialize(count: count) 
    pointer.deallocate(capacity: count) 
    } 

    pointer.pointee = 42 
    pointer.advanced(by: 1).pointee = 6 
    pointer.pointee 
    pointer.advanced(by: 1).pointee 

    let bufferPointer = UnsafeBufferPointer(start: pointer, count: count) 
    for (index, value) in bufferPointer.enumerated() { 
    print("value \(index): \(value)") 
    } 
} 

答えて

0

記事は、コードの下に説明しています。

更新:以下のコメントでユーザーatrickで述べたように、初期化解除のみ非自明なタイプのために必要とされます。それは、初期化を含めて、あなたが何かに変わった場合に備えて、あなたのコードを将来証明するための良い方法だと思います。また、コンパイラが最適化するので、通常は何も必要ありません。

関連する問題