1.左值引用
含義:放在=號(hào)左邊的事物舆吮,如在棧上或推上分配的對(duì)象或變量红淡,或?qū)ο蟪蓡T--有明確的內(nèi)存地址外莲。
//var為變量
Int & ref = var; //編譯通過猪半,var為左值
//對(duì)左值的const引用創(chuàng)建了臨時(shí)性對(duì)象
Int const& i = 42; //編譯通過,42為右值偷线,這里比較特殊
2.右值引用
含義:放在=號(hào)右邊的事物磨确,如字面量和臨時(shí)變量。
Int&& i = 42; //編譯通過声邦,42為右值
Int j=42;
Int && k=j; //編譯失敗乏奥,j為右值,所以不能進(jìn)行右值引用
3.C++ 存儲(chǔ)區(qū)知識(shí)點(diǎn)
在C++中亥曹,內(nèi)存分成5個(gè)區(qū)英融,他們分別是堆、棧歇式、自由存儲(chǔ)區(qū)驶悟、全局/靜態(tài)存儲(chǔ)區(qū)和常量存儲(chǔ)區(qū)。
1》 棧材失,編譯器在需要的時(shí)候分配痕鳍,在不需要的時(shí)候自動(dòng)清除的變量的存儲(chǔ)區(qū),其變量通常是局部變量、函數(shù)參數(shù)等笼呆。
2》 堆熊响,由new分配的內(nèi)存塊,诗赌,其釋放由程序去控制汗茄,一般new對(duì)應(yīng)delete。
3》 自由存儲(chǔ)區(qū)铭若,由malloc等分配的內(nèi)存塊洪碳,他和堆是十分相似的,不過它是用free來結(jié)束自己的生命的叼屠。
4》 全局/靜態(tài)存儲(chǔ)區(qū)瞳腌,全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,在C++里面镜雨,他們共同占用同一塊內(nèi)存區(qū)嫂侍。
5》 常量存儲(chǔ)區(qū),這是一塊比較特殊的存儲(chǔ)區(qū)荚坞,他們里面存放的是常量挑宠,不允許修改。
4.C++類在堆或棧上的分配情況
在C++中颓影,類的對(duì)象建立分為兩種各淀,一種是靜態(tài)建立,如A a瞭空;另一種是動(dòng)態(tài)建立揪阿,如A* ptr=new A;這兩種方式是有區(qū)別的咆畏。
1南捂、靜態(tài)建立類對(duì)象:是由編譯器為對(duì)象在棧空間中分配內(nèi)存旧找,是通過直接移動(dòng)棧頂指針溺健,挪出適當(dāng)?shù)目臻g,然后在這片內(nèi)存空間上調(diào)用構(gòu)造函數(shù)形成一個(gè)棧對(duì)象钮蛛。使用這種方法鞭缭,直接調(diào)用類的構(gòu)造函數(shù)。
2魏颓、動(dòng)態(tài)建立類對(duì)象岭辣,是使用new運(yùn)算符將對(duì)象建立在堆空間中。這個(gè)過程分為兩步:
第一步是執(zhí)行operator new()函數(shù)甸饱,在堆空間中搜索合適的內(nèi)存并進(jìn)行分配沦童;
第二步是調(diào)用構(gòu)造函數(shù)構(gòu)造對(duì)象仑濒,初始化這片內(nèi)存空間。這種方法偷遗,間接調(diào)用類的構(gòu)造函數(shù)墩瞳。
參考自C++11并發(fā)編程、網(wǎng)絡(luò)資源