2017-10-18 95 views
0

給定UnsafeMutablePointer的實例,在deallocate(capacity:)之前撥打deinitialize(count:)有什麼意義?Swift UnsafeMutablePointer:我必須在釋放之前調用deinitialize嗎?

難道你只是打電話給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在下面的評論中指出,去初始化僅需要非平凡類型。也就是說,包括去初始化是一種很好的方式,可以在將來更改爲不重要的情況下對將來的代碼進行驗證。另外,它通常不會花費任何代價,因爲編譯器會優化它。

相關問題