日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > C++中new與delete的用法

C++中new與delete的用法

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-12-08 08:46:28 閱讀次數(shù):4180次

最近在學(xué)習(xí)C++的進(jìn)程中,發(fā)現(xiàn)指針和new和delete的使用遍及全書(shū),可見(jiàn)其重要性。在學(xué)習(xí)了1個(gè)階段以后,總結(jié)1下new和delete的用法,指針還沒(méi)有摸透,待往后總結(jié)。

1.new和delete有甚么用?

new和delete是C++中的兩個(gè)操作符,new用于給單個(gè)對(duì)象或數(shù)組,結(jié)構(gòu)等分配內(nèi)存,在內(nèi)存使用完后,用delete進(jìn)行釋放內(nèi)存。而且是逐一對(duì)應(yīng)關(guān)系,有了new分配了內(nèi)存,必定需要delete來(lái)釋放內(nèi)存,其分配和釋放的必須是同1地址的內(nèi)存。不然就很有可能致使內(nèi)存泄漏的后果,如果內(nèi)存泄漏嚴(yán)重,程序就極有可能崩潰。

2.使用new創(chuàng)建動(dòng)態(tài)數(shù)組

在這里順便介紹3個(gè)術(shù)語(yǔ):

(1)聯(lián)編(binding):聯(lián)編是指1個(gè)計(jì)算機(jī)程序本身彼此關(guān)聯(lián)(使1個(gè)源程序經(jīng)過(guò)編譯、連接,成為1個(gè)可履行程序)的進(jìn)程,在這個(gè)聯(lián)編進(jìn)程中,需要肯定程序中的操作調(diào)用(函數(shù)調(diào)用)與履行該操作(函數(shù))的代碼段之間的映照關(guān)系,依照聯(lián)編所進(jìn)行的階段不同,可分為靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編。

(2)靜態(tài)聯(lián)編(static binding):是指在編譯階段就將函數(shù)實(shí)現(xiàn)和函數(shù)調(diào)用關(guān)聯(lián)起來(lái),因此靜態(tài)聯(lián)編也叫早綁定,在編譯階段就必須了解所有的函數(shù)或模塊履行所需要檢測(cè)的信息,它對(duì)函數(shù)的選擇是基于指向?qū)ο蟮闹羔槪ɑ蛟茫┑念愋汀?/span>

(3)動(dòng)態(tài)聯(lián)編(dynamic binding):指在程序履行的時(shí)候才將函數(shù)實(shí)現(xiàn)和函數(shù)調(diào)用關(guān)聯(lián),因此也叫運(yùn)行時(shí)綁定或晚綁定,動(dòng)態(tài)聯(lián)編對(duì)函數(shù)的選擇不是基于指針或援用,而是基于對(duì)象類型,不同的對(duì)象類型將做出不同的編譯結(jié)果。


然后我們假定需要編寫1個(gè)程序,其中需要的數(shù)組長(zhǎng)度沒(méi)法在編譯時(shí)進(jìn)行肯定,而需要在運(yùn)行時(shí)期肯定其中的值,這樣就沒(méi)法通過(guò)聲明1個(gè)數(shù)組滿足需求了。由于聲明數(shù)組后,程序在編譯期間將會(huì)為它分配內(nèi)存,不管程序終究是不是使用過(guò)數(shù)組,這個(gè)數(shù)組都占用了1定的內(nèi)存,而且它不夠靈活。所以在這類情況下,我們就需要使用動(dòng)態(tài)聯(lián)編。也是用使用new創(chuàng)建動(dòng)態(tài)數(shù)組,在運(yùn)行時(shí)分配內(nèi)存。

代碼實(shí)例:

#include <iostream> int main() { using namespace std; int * point = new int[3]; //int * point[3] = new int; //This is a wrong way to difine a array point[0] = 1; point[1] = 2; point[2] = 3; cout << "point[0] is " << point[0] << " "; cout << "point[1] is " << point[1] << " "; cout << "point[2] is " << point[2] << endl; //endl is equal to " " delete [] point; //free memory return 0; }

這段代碼簡(jiǎn)單易懂,但凡是有點(diǎn)編程基礎(chǔ)的人應(yīng)當(dāng)都能看懂。其中最關(guān)鍵的兩句不過(guò)就是new分配內(nèi)存和delete釋放內(nèi)存的語(yǔ)句。new表達(dá)式分配了1個(gè)含有3個(gè)元素的數(shù)組,并且指針指向數(shù)組第1個(gè)元素,數(shù)組名此時(shí)表示數(shù)組第1個(gè)元素的地址。


3.使用new創(chuàng)建動(dòng)態(tài)結(jié)構(gòu)

創(chuàng)建動(dòng)態(tài)結(jié)構(gòu)和創(chuàng)建動(dòng)態(tài)數(shù)組的方式和思想并沒(méi)有太大的出入。直接上實(shí)例,在代碼中分析。

struct struct1 //structure definition { char name[20]; float volume; double price; }; int main() { using namespace std; struct1 * ps = new struct1; //allot memory for structure cout << "Enter name of struct1 item: "; cin.get(ps->name,20); cout << "Enter volume in cubic feet: "; cin >> (*ps).volume; //method 2 for memory access cout << "Enter price: $"; cin >> ps -> price; cout << "Name: " << (*ps).name << endl; cout << "Volume: " << ps->volume << " cubic feet "; //method 1 cout << "Price: $" << ps->price << endl; //method 2 delete ps; return 0; }
簡(jiǎn)單說(shuō)幾點(diǎn)和創(chuàng)建動(dòng)態(tài)數(shù)組的不同的地方:

<1>創(chuàng)建數(shù)組時(shí)的指針類型可以根據(jù)需求不同可以是int,char,double等等,創(chuàng)建結(jié)構(gòu)時(shí)指針類型就只能是結(jié)構(gòu)變量了,也就是上述代碼中的struct1,不能任意的喜歡那個(gè)類型就上哪一個(gè)了。指針?lè)矫娴牟煌筒环治隽?/strong>

<2>對(duì)創(chuàng)建數(shù)組,分配內(nèi)存和釋放內(nèi)存時(shí)都有1個(gè)[],但是在結(jié)構(gòu)中,就沒(méi)有這個(gè)[]了。

4.使用new創(chuàng)建單個(gè)對(duì)象

動(dòng)態(tài)創(chuàng)建對(duì)象時(shí),只需指定其數(shù)據(jù)類型,沒(méi)必要為該對(duì)象命名,new表達(dá)式返回指向新創(chuàng)建對(duì)象的指針,我們通過(guò)該指針來(lái)訪問(wèn)此對(duì)象。

int main() { using namespace std; int nights = 1001; int * pt = new int; //allocate space for an int *pt = 1001; //store a value there cout << "nights value = "; cout << nights << ": location " << &nights << endl; cout << "int "; cout << "value = " << *pt << ": location = " << pt << endl; double * pd = new double; //allocate space for a double *pd = 10000001.0; //store a value there cout << "double "; cout << "value = " << *pd << ": location = " << pd << endl; cout << "location of pointer pd: " << &pd << endl; cout << ": size of * pt = " << sizeof(*pt) << endl; cout << "size of pd = " << sizeof pd; cout << ": size of *pd = " << sizeof(*pd) << endl; return 0; }
最后簡(jiǎn)單提1下這段代碼中的nights變量和pd指針的值都寄存在棧(stack)中,而用new分配的內(nèi)存在堆(heap)或自由存儲(chǔ)區(qū)(free store)中。




生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 羞羞视频在线观看免费 | 韩日精品一区二区 | 色综合久 | 性天堂 | 国产精品一区电影 | 亚洲欧美综合久久 | 暖暖日本在线视频 | 欧美日韩在线不卡 | 成人高清视频免费观看 | 黄色片免费看 | 欧美一区亚洲 | 强公把我次次高潮hd | 一本色道精品久久一区二区三区 | 欧美va天堂在线电影 | 中文字幕免费在线 | 中文字幕日韩欧美一区二区三区 | 欧美日韩成人在线观看 | 国产精品日韩欧美一区二区 | 疯狂欧洲av久久成人av电影 | 国产成人亚洲精品 | 欧美综合在线视频 | 日韩成人在线观看 | 综合一区二区三区 | 国产精品久久久久久久久久白浆 | 亚洲福利精品 | 久久久国产一区二区三区 | 精品国产乱码久久久久久牛牛 | 国产毛片视频 | 国产一区二区精品在线 | 欧美综合在线视频 | 91精品免费视频 | 国产精品嫩草影视久久久 | 一级毛片av | 免费激情网址 | 加勒比综合 | 午夜成人免费视频 | 国产福利av| 日产一二三四五六区传媒 | 在线色av| 欧美视频一区二区三区 | 久久久亚洲国产 |