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;
}