作风建设网站,个人网上注册,wp 企业网站模板,建设网站建设费用这种在程序运行过程中申请和释放的存储单元也称为堆对象#xff0c;申请和释放过程过程一般称为建立和删除。 1、new运算和delete运算 运算符new的功能是动态分配内存#xff0c;或者称为动态创建堆对象#xff0c;语法形式为#xff1a; new 类型名T#xff08;初值列表申请和释放过程过程一般称为建立和删除。 1、new运算和delete运算 运算符new的功能是动态分配内存或者称为动态创建堆对象语法形式为 new 类型名T初值列表//用于申请分配存放T类型数据的内存空间并使用初值列表中给出的值进行初始化。 如果建立的对象是一个基本类型变量初始化过程就是赋值如 int *point; point new int(2); 动态分配了用于存放int类型数据的内存空间并将初值2存入该空间中然后将首地址赋给指针point。 如果建立的对象时某一个类的实例对象就是要根据实际情况调用该类的构造函数。 运算符delete用来删除由new建立的对象释放指针所指向的内存空间。格式为 delete 指针名; 如果删除的是对象该对象的析构函数将被调用。对于用new建立的对象只能使用delete进行一次删除操作如果对同一内存空间多次使用delete进行删除将会导致运行错误。 #includeiostreamusing namespace std;class Point{public: Point() {XY0;coutDefault Constructor called.endl;} Point(int xx,int yy){Xxx;Yyy;coutConstructor called.endl;}//构造函数 ~Point() {coutDestructor called.endl;} int GetX(){return X;} int GetY(){return Y;} void Move(int x,int y) {Xx;Yy;}private: int X,Y;}; int main(){ coutStep One:endl; Point *Ptrlnew Point;//动态创建对象没有给出初值因此调用默认的构造函数 delete Ptrl;//删除对象自动调用析构函数 coutStep Two:endl; Ptrlnew Point(1,2);//动态创建对象并给出初值因此调用有形参的构造函数 delete Ptrl;//删除对象自动调用析构函数 getchar();} 使用运算符new也可以创建数组类型的对象这时需要给出数组的结构说明用new运算符动态创建一维数组的语法形式为 new 类型名T{下标表达式} 其中下标表达式之处数组元素的个数动态为数组分配内存时不能指定数组元素的初值。注意如果是用new建立的数组用delete删除时在指针名前面要加[]如 #includeiostream using namespace std; class Point { //类的定义 }; int main() { Point *Ptrnew Point[2];//创建对象数组 Ptr[0].Move(5,10);//通过指针访问数组元素的成员 Ptr[1].Move(15,20);//通过指针访问数组元素的成员 coutDeleting ...endl; delete[] Ptr;//删除整个对象数组 } 利用动态内存分配操作实现了数组的动态创建使得数组元素的个数可以根据运行时的需要而确定。但是建立和删除数组的过程使得程序略显繁琐更好的方法是将数组的建立和删除过程封装起来形成一个动态数组类。 eg #includeiostream using namespace std; class Point { //类的定义 }; class ArrayOfPoints { public: ArrayOfPoints(int n) {numberOfPointsn;pointsnew Point[n];} ~ArrayOfPoints() {coutDeleting...endl;numberOfPoints0;delete[] points;} Point Element(int n) {return points[n];} private: Point *points; int numberOfPoints; }; int main() { int numbers; coutPlease enter the number of points:; cinnumber; ArrayOfPoints points(number);//创建对象数组 points.Element(0).Move(5,10);//通过指针访问数组元素的成员 points.Element(1).Move(15,20);//同上 } 在main函数中只是建立一个ArrayOfPoints类的对象对象的初始化参数number指定了数组元素的个数创建和删除对象数组的过程都由ArrayOfPoints类的构造函数和析构函数完成。 用new操作也可以创建多维数组形式如下 new 类型名T[下标表达式1][下标表达式2]... egfloat *fp; fpnew float[10][25][10]; 会产生错误因为这里new操作产生的是指向一个25x10的二维float类型数组的指针。应该改为 float (*cp)[25][10]; cp new float[10][25][10]; 2、动态内存分配与释放函数 a、动态存储分配函数 原型void *malloc(size); 参数size是欲分配的字节数 返回值成功则返回void型智者失败则返回空指针。 头文件stdlib.h和malloc.h b、动态内存释放函数 原型void free(void *memblock); 参数memblock是指针指向需要释放的内存。 返回值无 头文件stdlib.h和malloc.h 转载于:https://www.cnblogs.com/gary-guo/p/6230032.html