8、new & delete
在C語言中用malloc和free開闢和釋放動態內存。 在C++中用new和delete開闢和釋放動態內存。
int main()
{
int *p = (int*)malloc(sizeof(int));//動態開闢內存
free(p);
int *pn = new int();//1、動態開闢內存空間;2、初始化爲()中的數字或調用構造函數(不加括號不初始化),沒有數字初始化爲0
delete pn;
int *p1 = (int*)malloc(sizeof(int)*10);//動態開闢數組
free(p1);
int *pn1 = new int[100]();//動態開闢長度爲100的數組並初始化爲0,但是不接受給一個數初始化
delete []pn1;
int **p2 = (int**)malloc(sizeof(int)*3);
for(int i=0;i<3;i++)
{
p2[i]=(int *)malloc(sizeof(int)*4);
}//動態開闢三行四列的數組
int **pn2 = new int*[3]();
for(int i=0;i<3;i++)
{
pn2[i]=new int[4]();
}//動態開闢三行四列的數組
for(int i=0;i<3;i++)
{
delete (pn2[i]);
}
delete pn2;//釋放
}
上邊介紹了用法,那malloc到底是怎麼實現的呢?這裏先留一個問題。
9、名字空間作用域 namespace
可以避免多個.cpp文件中的全局變量重名
#include<iostream>
using namespace std;//using提示符 把頭文件中std作用域去掉
namespace MyName//定義了一個新的作用域
{
int gdata=11;
}
namespace MyName//同名的namespace編譯時合併
{
int sum()
{
return 10+20;
}
}
int gdata=12;
using MyName::gdata;//using聲明,可以把gdata放在全局作用域
int main()
{
int gdata=13;
int data1= ::gdata;//全局作用域
int data2= MyName::gdata;//在MyName作用於找,data2的值爲11
using MyName::sum;//using聲明
int data3=sum();
}
using MyName::gdata;//using聲明,可以把gdata放在全局作用域
int main()
{
int data2=gdata;//有using聲明就不需要再加MyName::,data2的值爲11
}