class Cat { init() { print("Cat init(\(ObjectIdentifier(self))") } deinit { print("Cat deinit(\(ObjectIdentifier(self))") } func newCat() -> Cat { return Cat() } } func f0(_ x: Cat) { print("f0") } func main() { print("a") f0(Cat().newCat()) print("b") } main()a Cat init(ObjectIdentifier(0x00007fba7251c800) Cat init(ObjectIdentifier(0x00007fba725179b0) Cat deinit(ObjectIdentifier(0x00007fba7251c800) f0 Cat deinit(ObjectIdentifier(0x00007fba725179b0) bCat() は newCat() の呼び出し前に破棄される。