我正在探索 Swift 值类型,尤其是结构,以更好地了解它在不同场景中的用途。我很惊讶地看到枚举如何用于构建二叉搜索树,使用indirect
它引入了一层薄薄的参考语义。
enum BinarySearchTree<T: Comparable> {
case empty
case leaf(T)
indirect case node(BinarySearchTree, T, BinarySearchTree)
}
现在来到真正的问题,我正在努力寻找的是,值类型中的引用类型会发生什么。这种关系将如何运作?比如内存管理,对象生命周期。
例如
class B {
var data: Int = 0
deinit {
print("deallocated!")
}
}
struct A {
var b = B()
}
在上述情况下,值类型持有对引用类型的引用。
- 什么时候会
deinit
被叫到? - 每个类型的新结构实例是否都会
A
引用相同的类实例,B
或者它们会有所不同。 - 我应该注意什么或者这是代码异味?
- 还要别的吗?