C++变量的生存周期

        在C++中变量有以下两种生命周期:
        (1)变量由编译程序在编译时给其分配存储空间(称为静态存储分配),并在程序执行过程中始终存在。。这类变量的生存周期与程序的运行周期相同,当程序运行时,该变量的生存周期随即存在,程序运行结束,变量的生存周期随即终止。
        (2)变量由程序在运行时自动给其分配存储空间(称为自动存储分配),这类变量为函数(或块)中定义的自动变量。它们在程序执行到该函数(或块)时被创建,在函数(或块)执行结束时释放所占用的空间。

        例        变量作用域示例
 

#include<iostream>
using namespace std;
int i = 0;
int main()
{
	int i = 1;
	cout << i << endl;
	{
		int i = 2;
		cout << i << endl;
		{
			i += 1;
			cout << i << endl;
		}
		cout << i << endl;
	}
	cout << i << endl;
	return 0;
}

        从上面例子可以看出,由于作用域的屏蔽效应,如果函数中又同名变量,则不能访问外部变量。为了能在函数内部访问函数外定义的变量,可以使用C++作用域运算符::。通过作用域运算符,即使该函数(块)中已经有与之同名的变量,也可以在函数(块)中使用定义在函数外的全局变量。例如:在上面main函数中可以通过::i来访问外部变量i。
        当程序较大时,利用名字屏蔽机制是非常必要的。但是这也会导致程序可读性变差,好的程序设计风格应尽量避免名字屏蔽。

参考《全国计算机等级考试二级教程——C++语言程序设计》

### 动态变量生命周期 动态变量通常是指通过编程语言中的特定机制(如 `new` 或 `malloc`)在堆内存中分配的变量。这些变量生命周期由程序员显式控制,而不是像自动变量那样依赖于作用域。 #### 创建阶段 动态变量的创建发生在程序执行过程中,当调用诸如 `new` 的操作符或函数(如 C 中的 `malloc` 和 C++ 中的 `new`)时,在堆内存中为该变量分配空间[^1]。这种分配方式使得动态变量可以在超出其声明的作用域后仍然保持有效,只要未被显式释放。 ```cpp int* ptr = new int(10); // 在C++中创建一个整型动态变量并初始化为10 ``` #### 存活期间 一旦成功分配了动态变量,它将在整个应用程序运行期间持续存在,直到被手动释放或者程序终止为止。这意味着即使原始指针离开了它的作用域,只要还有其他有效的引用指向这块内存区域,则数据依然可用[^2]。 例如: ```javascript function createObject() { let obj = {}; // 局部对象 return obj; // 返回给外部环境继续使用 } const myObj = createObject(); console.log(myObj); // 即使createObject内部的对象已经超出了原本的作用域, // 它仍可通过myObj访问到。 ``` 这里需要注意的是JavaScript里的垃圾回收机制会自动管理不再使用的对象,这不同于某些低级语言需要开发者自行处理的情况[^3]。 #### 销毁过程 对于那些不支持自动化垃圾收集的语言来说,必须通过专门命令来释放之前请求得到的空间资源。比如在C/C++里分别利用free/delete完成这一工作;而在具有GC功能的语言环境下则无需担心这个问题因为系统能够追踪哪些部分已经成为孤立节点进而适时清理它们从而腾出更多可用容量供后续需求调配之需[^4]. ```c++ delete ptr; // 删除先前通过new建立起来的那个integer instance. free(ptr); // 对应于早先经由malloc获取的一块memory block而言解除绑定关系以便重新投入使用。 ``` 尽管如此, 如果忘记及时清除无用的数据结构就可能导致所谓的“内存泄漏”,即长期占用不必要的物理地址单元而无法再次加以运用直至进程结束才得以彻底解决此类隐患现象的发生频率因此显得尤为重要[^5]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值