内存与周期
动态分配内存
栈: 在函数内部声明的所有变量都将自动占用栈内存堆: 这是程序中未使用的内存,在程序运行时可用于动态分配内存
编译时,需要多少内存来存储某个定义变量中的特定信息
不确定,所需内存的大小需要在运行时才能确定new运算符:为给定类型的变量在运行时分配
堆内存,并创建了对象
内存管理
栈内存由系统自动管理,当函数结束调用时,栈上的局部变量会自动销毁;堆内存需要手动管理,即new分配空间,delete释放空间- new本质:在
堆上找到一块足够大的连续内存布局,其大小容纳动态分配的大小,返回其内存地址, 使用指针变量接受
栈内存数组
#include <iostream>
using namespace;
int array[5] = {1,2,3,4,5}; //数组元素已确定
堆内存数组
#include <iostream>
using namespace std;
int main() {
// new int[5] 返回堆上分配的内存的起始地址,用指针 array 存储
// array指针 默认指向 new分配的数组内存起始地址 , 而不是&temp(因其不确定)
// *array = array , 非数组指针(仅指向首地址的指针), 非退化,数组名传递
int *array = new int[5];
// 使用数组
for (int i = 0; i < 5; ++i) {
array[i] = i; // 等价于 *(array + i) = i;
}
// 输出数组元素
for (int i = 0; i < 5; ++i) {
cout << array[i] << " ";
}
cout << endl;
// 释放内存
delete [] array;
return 0;
}
堆内存对象
#include <iostream>
using namespace std;
class Box
{
public:
Box() {
cout << "调用构造函数!" <<endl;
}
~Box() {
cout << "调用析构函数!" <<endl;
}
};
int main( )
{
Box *myBoxArray = new Box[4]; // 对象数组,4次构造
delete [] myBoxArray; // 删除数组,4次析构
return 0;
}

浙公网安备 33010602011771号