C和C++區別(三)

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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章