【发布时间】:2017-07-30 08:32:09
【问题描述】:
考虑以下示例类:
class SocketWrapper {
let sock: Int32
init() throws {
try sock = SocketWrapper.createSocket()
}
deinit {
close(sock)
}
}
如果 createSocket() 抛出并且 init() 失败会发生什么?袜子将未初始化。当 init() 抛出时,是否仍然调用 deinit(在部分未初始化的对象上)?
【问题讨论】:
-
我对此表示怀疑,因为如果
createSocket抛出,那么sock永远不会被分配。这应该会给你一个提示,close(sock)不会真正起作用。 -
好的,我只是做了一个简单的例子。事实上,它没有按预期调用。只是没有找到任何规范的来源。
标签: swift