1.new操作符
内存分区模型(内存四区)
- 代码区
- 全局区(全局区的数据在程序执行完才被释放。)
- 栈区 (由编译器自动分配释放。)
- 堆区
(不同存放的数据赋予不同的生命周期。)
new操作符
-
c++利用new操作符在堆区开辟数据,堆开辟的数据由我们手动开辟并手动释放,释放时利用delete。
-
语法:new+数据类型
-
示例1(创建整型数据):
int * fun()
{
int *p=new int(10);//返回的是int类型的指针。
return p;
}
void test1()
{
int *p=fun();
cout<<*p<<endl;
cout<<*p<<endl;//如果想释放堆区域的数据,利用关键字delete。
delete p;
cout<<*p<<endl;//前面释放完后此处会发生异常。
}
输出结果
- 示例2(若是没有使用new返回函数地址)
#include<iostream>
using namespace std;
int* test()
{
int a=10;//局部变量,存放在栈区,栈区的数据在函数执行完后自动释放。
return &a;
}
int main()
{
int *q=test();
cout<<*q<<endl; //编译器自动会保存一次变量的值。
cout<<*q<<endl;
return 0;
}
输出结果
- 示例3(创建数组型数据)
void test2()
{
int *arr=new int[10];//在堆区利用new开辟整型数据的数组。
for(int i=0;i<10;i++)
{
arr[i]=i+100;
}
for(int i=0;i<10;i++)
{
cout<<arr[i]<<endl;
}
delete []arr;//释放数组前要加"[]"。
}
输出结果