Skip to content

作用域和生命周期 ​

作用域 ​

作用域决定了一个名称在代码的哪些部分可见。

函数名的作用域 ​

cpp
void foo();  // 函数名在声明后全局可见

int main() {
    foo();  // 可以调用
}

函数内部变量的作用域 ​

cpp
void function() {
    int x = 10;  // 函数作用域,从此处开始可见

    if (true) {
        int y = 20;  // if 块作用域
        std::cout << x << y;  // x 和 y 都可见
    }
    // y 在此处不可见
    std::cout << x;  // x 仍然可见
}

局部作用域 ​

cpp
void demo() {
    // 块作用域
    {
        int a = 1;
    }  // a 在此销毁

    // for 循环作用域
    for (int i = 0; i < 10; i++) {
        // i 只能在这里使用
    }
}

生命周期 ​

生命周期(Lifetime)决定变量何时创建、何时销毁。

自动生命周期 ​

cpp
void func() {
    int x = 5;  // 进入函数时创建,离开函数时销毁
    // x 的生命周期:函数调用期间
}

静态生命周期 ​

cpp
void func() {
    static int count = 0;  // 程序启动时创建,程序结束时销毁
    count++;
}

int main() {
    func();  // count = 1
    func();  // count = 2
    // count 在程序结束前一直存在
}

动态生命周期 ​

cpp
void func() {
    int *p = new int(10);  // 手动分配
    delete p;  // 手动释放
    // 或者使用智能指针自动管理
    auto p2 = std::make_unique<int>(20);  // 自动释放
}