new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
注意: new和delete是运算符,不是函数,因此执行效率高。
#include<iostream>
using namespace std;
//1 new和delete操作符 c++语法(malloc free)
//2 基础类型变量 分配数组变量 分配类对象
/************************************************************************/
/* new分配基础类型 */
/************************************************************************/
int main01()
{
//C语言的语法
int *p = (int *)malloc(sizeof(int));
*p = 10;
free(p);
//c++语言的语法
int *p2 = new int;
*p2 = 20;
free(p2);
//分配内存的时候初始化
int *p3 = new int(30);
printf("p3:%d\n",*p3);
delete p3;
system("pause");
return 0;
}
/************************************************************************/
/* //分配数据变量 */
/************************************************************************/
int main02()
{
//c语言分配数据
int *p = (int *)malloc(sizeof(int) * 10);//int arry[10]
p[0] = 1;
free (p);
//c++语言分配数据
int *pArry = new int[10];
pArry[1] = 2;
delete [] pArry;//释放数组内存的时候不要忘记 "[]"
system("pause");
return 0;
}
/************************************************************************/
/*动态分配一个对象 */
/************************************************************************/
class Test
{
public:
Test(int _a)
{
a = _a;
cout<<"构造函数"<<endl;
}
~Test()
{
cout<<"析构函数"<<endl;
}
protected:
private:
int a;
};
//分配对象new delete
//相同 和 不同的地方 new能自动的执行类型的构造函数 delete操作符能执行类的析构函数
int main()
{
//c语言的语法
Test *pT1 = (Test *)malloc(sizeof(Test));
free(pT1);
//c++的语法
Test *pT2 = new Test(10);
delete pT2;
system("pause");
return 0;
}