Swift中定义自身类型实例变量的类会发生什么?编译无报错
问题解答
问题1:如果定义一个类型为其所属类的实例变量,会发生什么?
- 会触发无限递归初始化,最终导致栈溢出错误。
- 原理:创建类实例时必须完成所有实例变量的初始化,而该变量本身是当前类的实例,初始化变量时又会创建新的类实例,这个过程循环往复,直到调用栈超出系统允许的最大深度,程序崩溃。
问题2:在Swift中定义如下代码所示的类时,编译器未报错,这种情况下会产生什么结果?
class Test { var test = Test() }
- 编译器不会在编译阶段报错,因为语法上符合规则,但运行时会直接崩溃。
- 具体表现:当你尝试创建
Test的实例(比如执行let t = Test())时,会陷入无限递归的初始化过程,很快触发栈溢出,程序终止运行。
内容的提问来源于stack exchange,提问作者Peruser
相关产品推荐
相关产品推荐

