我可以使用UnsafeMutablePointer.deallocate(capacity:)
指针,其指针的内存以前是使用malloc
分配的吗?即,deallocate
的行为是free
吗?
发生这种情况的一种情况是从Swift调用C函数时使用malloc
分配内存并期望调用者稍后free()
该内存。一个例子是LIBMTP_Detect_Raw_Devices
函数(see here for an example use)。该函数期望调用者释放在函数内分配的内存(rawdevices
)。
答案 0 :(得分:2)
文档不清楚这一点,但测试表明互操作性。
在C中使用malloc()
,然后在Swift中调用deallocate()
并在C中尝试free()
指针(反之亦然)将导致运行时错误,但代码如果只使用deallocate()
或free()
中的一个,则会正常运行,但不会同时使用。
同样,在Swift中分配结构,然后在Swift中使用deallocate()
,在C中使用free()
(或者反过来)也会导致运行时错误。
根据@jtbandes的建议,在Swift中使用free()
也是可以的。实际上,这种方法可能比调用deallocate()
更安全。
至于文档,请参阅https://developer.apple.com/reference/swift/unsafemutablepointer。
此外,您可以在此处浏览UnsafeMutablePointer
的源代码:https://github.com/apple/swift/blob/master/stdlib/public/core/UnsafePointer.swift.gyb
我还没有时间弄清楚实施情况。