Avatar
omochimetaru 8/21/2017 1:58 AM
あ、いい指摘だね、それは
1:59 AM
テンポラリ変数での呼び出しと
1:59 AM
呼び出し後の再代入に
1:59 AM
分解される。
2:00 AM
class Cat { init() { print("Cat init(\(ObjectIdentifier(self))") } deinit { print("Cat deinit(\(ObjectIdentifier(self))") } var catProp: Cat { get { return Cat() } set { print("catProp setter: \(ObjectIdentifier(self))") } } } func f1(_ x: inout Cat) { print("f1 begin") x = Cat() print("f1 end") } func main() { print("b") f1(&Cat().catProp) print("c") } main()
2:00 AM
b Cat init(ObjectIdentifier(0x00007fd899434f90) Cat init(ObjectIdentifier(0x00007fd899424d70) f1 begin Cat init(ObjectIdentifier(0x00007fd899434d50) Cat deinit(ObjectIdentifier(0x00007fd899424d70) f1 end catProp setter: ObjectIdentifier(0x00007fd899434f90) Cat deinit(ObjectIdentifier(0x00007fd899434d50) Cat deinit(ObjectIdentifier(0x00007fd899434f90) c
2:00 AM
↑の出力で、f1の呼び出し前に破棄されるCatがなくなっていることと
2:01 AM
setterの呼び出しがf1 end の後になっていることがポイント