在C++程序中,内存需求都是在编写程序的时候声明变量来确定,但是程序在运行过程中需要动态分配内存。
为此C ++将运算符new和delete合成在一起。
说明:通过new关键字向系统内存申请。
C++中的动态内存分配是基于数据类型进行的。
delete关键字用于内存释放。
datetype *pointer = new datatype; . . . delete pointer
datatype可以是C语言的基本数据类型,也可以是结构体,还可以是类。
pointer是一个指针,指向new返回的地址。
举例:
{
int *ip=new int //动态分配一个整数大小的内存
(*ip)=10;
detle ip;
}
或者:
Cbookname *ip=new bookname; //动态分配bookname类
strcpy(ip->name,"思考快与慢");
ip.hd=18;
detle ip;
如果new出来的是类,相当于创建对象,所以会调用构造函数,delete的时候也会调用析构函数。
实际测试:
#include"/root/public.h"
int main()
{
char *ip=new char [100];
memset(ip,0,100);
strcpy(ip,"思考快与慢");
printf("=%s=\n",ip);
}
=思考快与慢=
测试:
#include"/root/public.h"
class Cbookname
{
public:
char *ip;
int m_hd;
char m_name[100];
void malloc_(int size)
{
if(ip!=0){delete ip; ip=0;
}
ip=new char [size];
}
void free_()
{
if(ip!=0){delete ip; ip=0; }
}
Cbookname()
{
ip=0;
m_hd=0;
memset(m_name,0,sizeof(m_name));
printf("这里是构造函数");
};
~Cbookname()
{
free_();
printf("这里是析构函数");
}
};
int main()
{
Cbookname bookname;
bookname.malloc_(200);
strcpy(bookname.ip,"思考快与慢");
printf("%s\n",bookname.ip);
}
这里是构造函数思考快与慢
这里是析构函数