徐州网站建设xlec,微信管理系统软件,自学制作app需要多久,前端电商网站开发周期今天情人节#xff0c;有没对象的吗#xff1f;假设你不知道new怎么用#xff0c;每个人都有两种身份#xff0c;一种没对象的人#xff0c;这个时候new一个对象给你#xff0c;一种是有对象的人#xff0c;这个delete对象。等你学完这个new和delete知识点#xff0c;无…今天情人节有没对象的吗假设你不知道new怎么用每个人都有两种身份一种没对象的人这个时候new一个对象给你一种是有对象的人这个delete对象。等你学完这个new和delete知识点无论何时何地你都能new或者delete一个对象。一.关于new与delete new和malloc一样就是告诉计算机开辟一段新的空间但是和一般的声明不同的是new开辟的空间在堆上而一般声明的变量存放在栈上。new开辟空间和普通变量开辟空间不同比如为普通变量开辟的内存(在栈区)在函数体里面使用完之后就会立即被操作系统释放而new开辟的内存(在堆区)在函数结束的时候必须由程序员手动释放如果这块内存不用了用delete运算符释放它二.使用堆区的内存有四个步骤1声明一个指针2用new运算符向系统申请一块内存让指针指向这块内存3通过对指针解引用的方法像使用变量一样使用这块内存4如果这块内存不用了用delete运算符释放它。 注意 如果申请成功返回一个地址如果申请失败返回一个空地址 释放内存的语法delete 地址;释放内存不会失败还钱不会失败。 三.申请内存的语法new 数据类型new 数据类型初始值new 数据类型[常量表达式]四.示例 int * p1new int;//new一个整形对象int* p2 new int(2); // *p2初始化值是2,这样直接在定义后面初始化是可以的cout *p *p endl;*p 8;//解引用修改p所直指向的值也是可以的cout *p *p endl;delete p;//如果不想使用指针可以定义一个变量在new之前用“*”表示new出来的内容int q *new int;q 1;cout q endl;int *p3new int[1000] //申请1000个单位内存空间int* example2()
{//当new一个数组时同样用一个指针接住数组的首地址int *q new int[3];for(int i0; i3; i)q[i] i;return q;
}struct student
{string name;int score;
};student* stu()
{//这里是用一个结构体指针接住结构体数组的首地址//对于结构体指针个人认为目前这种赋值方法比较方便student *stud new student[3]{{张三, 100}, {李四, 100}, {王五, 100}};return stud;
}注意动态分配出来的内存没有变量名只能通过指向它的指针来操作内存中的数据。如果动态分配的内存不用了必须用delete释放它否则有可能用尽系统的内存。动态分配的内存生命周期与程序相同程序退出时如果没有释放系统将自动回收。就算指针的作用域已失效所指向的内存也不会释放。用指针跟踪已分配的内存时不能跟丢。