面试题答案
一键面试常见场景1:悬垂引用
- 场景描述:当一个函数返回一个对局部变量的引用时,局部变量在函数结束时被销毁,导致返回的引用指向已释放的内存。
- 识别方法:编译器会报错,提示类似 “error[E0106]: missing lifetime specifier” 或 “error[E0597]:
xxx
does not live long enough” 等信息,其中xxx
通常是局部变量名。 - 初步处理:改变函数逻辑,确保返回的引用指向的对象生命周期足够长。比如,可以返回对象的所有权(而非引用),或者传入一个生命周期足够长的对象并返回对其的引用。
常见场景2:生命周期不匹配
- 场景描述:在结构体中使用引用时,结构体实例的生命周期和其内部引用的生命周期不匹配。例如,一个结构体包含对函数局部变量的引用,但结构体实例的生命周期长于局部变量。
- 识别方法:编译器报错,提示 “error[E0310]: the parameter type
xxx
may not live long enough”,这里xxx
是结构体中引用的类型。 - 初步处理:通过显式指定生命周期参数来解决。在结构体定义和使用处,明确声明引用的生命周期,确保其与结构体实例的生命周期兼容。例如,给结构体添加生命周期参数
'a
,并在结构体字段的引用类型中使用该参数。