MST

星途 面试题库

面试题:C++函数返回常量引用的内存管理与生命周期

假设有如下代码片段: ```cpp const int& func() { int num = 10; return num; } ``` 这段代码存在什么问题?请详细解释原因,并说明如何正确地设计一个返回常量引用的函数,保证内存管理和引用生命周期的正确性。
48.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 问题分析
    • 这段代码存在严重问题。函数func返回一个对局部变量num的常量引用。局部变量num在函数结束时会被销毁,其占用的内存将被释放。而返回的引用仍然指向这块已经无效的内存,这就导致了悬空引用。后续如果通过这个悬空引用去访问数据,会引发未定义行为。
  2. 正确设计返回常量引用的函数示例
    • 返回全局变量的常量引用
int global_num = 10;
const int& func() {
    return global_num;
}
  • 返回静态局部变量的常量引用
const int& func() {
    static int num = 10;
    return num;
}

在这两种情况下,global_numstatic num的生命周期都长于函数调用,所以返回它们的常量引用是安全的,不会产生悬空引用问题。全局变量在程序启动时分配内存,直到程序结束才释放;静态局部变量在第一次进入函数时初始化,并且在函数调用结束后不会被销毁,其生命周期持续到程序结束。