在軟件開發(fā)過程中蝇刀,常常需要?jiǎng)討B(tài)地分配和撤銷內(nèi)存空間骏庸,例如對(duì)動(dòng)態(tài)鏈表中結(jié)點(diǎn)的插入與刪除。
在C語言中是利用庫(kù)函數(shù)malloc和free來分配和撤銷內(nèi)存空間的奋单。
C++提供了較簡(jiǎn)便而功能較強(qiáng)的運(yùn)算符new和delete來取代malloc和free函數(shù)。
注意: new和delete是運(yùn)算符猫十,不是函數(shù)览濒,因此執(zhí)行效率高。
雖然為了與C語言兼容拖云,C++仍保留malloc和free函數(shù)贷笛,但建議用戶不用malloc和free函數(shù),而用new和delete運(yùn)算符宙项。new運(yùn)算符的例子:
new int; //開辟一個(gè)存放整數(shù)的存儲(chǔ)空間乏苦,返回一個(gè)指向該存儲(chǔ)空間的地址(即指針)
new int(100); //開辟一個(gè)存放整數(shù)的空間,并指定該整數(shù)的初值為100,返回一個(gè)指向該存儲(chǔ)空間的地址
new char[10]; //開辟一個(gè)存放字符數(shù)組(包括10個(gè)元素)的空間汇荐,返回首元素的地址
new int[5][4]; //開辟一個(gè)存放二維整型數(shù)組(大小為5*4)的空間洞就,返回首元素的地址
float *p=new float (3.14159); //開辟一個(gè)存放單精度數(shù)的空間,并指定該實(shí)數(shù)的初值為//3.14159掀淘,將返回的該空間的地址賦給指針變量p
new運(yùn)算符使用的一般格式為:
new 類型 [初值];
用new分配數(shù)組空間時(shí)不能指定初值旬蟋。如果由于內(nèi)存不足等原因而無法正常分配空間,則new會(huì)返回一個(gè)空指針NULL革娄,用戶可以根據(jù)該指針的值判斷分配空間是否成功咖为。
delete運(yùn)算符使用的一般格式為:
delete [ ] 指針變量
例如要撤銷上面用new開辟的存放單精度數(shù)的空間(上面第5個(gè)例子),應(yīng)該用
delete p;
前面用“new char[10];”開辟的字符數(shù)組空間稠腊,如果把new返回的指針賦給了指針變量pt,則應(yīng)該用以下形式的delete運(yùn)算符撤銷該空間:
delete [] pt; //在指針變量前面加一對(duì)方括號(hào)鸣哀,表示是對(duì)數(shù)組空間的操作
【例7】開辟空間以存放一個(gè)結(jié)構(gòu)體變量架忌。
#include <iostream>
#include <string>
using namespace std;
struct Student //聲明結(jié)構(gòu)體類型Student
{
string name;
int num;
char sex;
};
int main( )
{
Student *p; //定義指向結(jié)構(gòu)體類型Student的數(shù)據(jù)的指針變量
p=new Student; //用new運(yùn)算符開辟一個(gè)存放Student型數(shù)據(jù)的空間
p->name="Wang Fun"; //向結(jié)構(gòu)體變量的成員賦值
p->num=10123;
p->sex='m';
cout<<p->name<<endl<<p->num
<<endl<<p->sex<<endl; //輸出各成員的值
delete p; //撤銷該空間
return 0;
}
運(yùn)行結(jié)果為:Wang Fun 10123 m圖7.11 為new student開辟的空間。 在動(dòng)態(tài)分配/撤銷空間時(shí)我衬,往往將這兩個(gè)運(yùn)算符和結(jié)構(gòu)體結(jié)合使用叹放,是很有效的∧痈幔可以看到:要訪問用new所開辟的結(jié)構(gòu)體空間井仰,無法直接通過變量名進(jìn)行,只能通過指針p進(jìn)行訪問破加。如果要建立一個(gè)動(dòng)態(tài)鏈表俱恶,必須從第一個(gè)結(jié)點(diǎn)開始,逐個(gè)地開辟結(jié)點(diǎn)并輸入各結(jié)點(diǎn)數(shù)據(jù)范舀,通過指針建立起前后相鏈的關(guān)系合是。
NdkDemo代碼已上傳至Github
如有不正支出,歡迎留言交流!
我的GitHub
我的CSDN
我的簡(jiǎn)書
開發(fā)筆記