c11部分新特性
一、c11部分新特性
智能指針
智能指針作用:
C++程序設(shè)計(jì)中使用堆內(nèi)存是非常頻繁的操作,使用普通指針容易造成內(nèi)存泄漏、二次釋放等問(wèn)題。C++11中引入了智能指針的概念。智能指針就是幫我們C++程序員管理動(dòng)態(tài)分配的內(nèi)存的,它會(huì)幫助我們自動(dòng)釋放new出來(lái)的內(nèi)存,從而避免內(nèi)存泄漏
為什么智能指針可以像普通指針那樣使用???
因?yàn)槠淅锩嬷剌d了 * 和 -> 運(yùn)算符, * 返回普通對(duì)象,而 -> 返回指針對(duì)象。
auto_ptr:
auto_ptr 是c++ 98定義的智能指針模板,可以將new 獲得(直接或間接)的地址賦給這種對(duì)象。當(dāng)對(duì)象過(guò)期時(shí),其析構(gòu)函數(shù)將使用delete 來(lái)釋放內(nèi)存!
auto_ptr 被C++11拋棄的主要原因:
a、復(fù)制或者賦值都會(huì)改變資源的所有權(quán)。
b、在STL容器中使用auto_ptr存在著重大風(fēng)險(xiǎn),因?yàn)槿萜鲀?nèi)的元素必須支持可復(fù)制和可賦值。
unique_ptr:
unique_ptr是auto_ptr的一個(gè)改良版,不能賦值也不能拷貝,保證一個(gè)對(duì)象同一時(shí)間只有一個(gè)智
能指針。
shared_ptr:
shared_ptr可以使得一個(gè)對(duì)象可以有多個(gè)智能指針,當(dāng)這個(gè)對(duì)象所有的智能指針被銷(xiāo)毀時(shí)就會(huì)自
動(dòng)進(jìn)行回收。(內(nèi)部使用計(jì)數(shù)機(jī)制進(jìn)行維護(hù))
weak_ptr:
weak_ptr是為了協(xié)助shared_ptr而出現(xiàn)的,只可以從一個(gè) shared_ptr 或另一個(gè) weak_ptr 對(duì)象構(gòu)造, 他的構(gòu)造或者析構(gòu)不會(huì)改變計(jì)數(shù)器,它不能訪問(wèn)對(duì)象,只能觀測(cè)shared_ptr的引用計(jì)數(shù),防止出現(xiàn)死鎖。
右值引用
右值引用和左值引用的區(qū)別:
左值持久,右值短暫,左值引用綁定到有確定存儲(chǔ)空間以及變量名的對(duì)象上,表達(dá)式結(jié)束后對(duì)象依然存在;右值引用綁定到要求轉(zhuǎn)換的表達(dá)式、字面常量、返回右值的表達(dá)式等臨時(shí)對(duì)象上,賦值表達(dá)式結(jié)束后就對(duì)象就會(huì)被銷(xiāo)毀。
引入右值引用原因:
替代需要銷(xiāo)毀對(duì)象的拷貝,提高效率
lambda表達(dá)式
1.捕獲列表。在C ++規(guī)范中也稱(chēng)為L(zhǎng)ambda導(dǎo)入器, 捕獲列表總是出現(xiàn)在Lambda函數(shù)的開(kāi)始處。
2.參數(shù)列表。與普通函數(shù)的參數(shù)列表一致。如果不需要參數(shù)傳遞,則可以連同括號(hào)“()”一起省略。
3.異常說(shuō)明。用于Lamdba表達(dá)式內(nèi)部函數(shù)拋出異常。
4.返回類(lèi)型。 追蹤返回類(lèi)型形式聲明函數(shù)的返回類(lèi)型。我們可以在不需要返回值(或者明確返回類(lèi)型)的時(shí)候也可以省略。
5. lambda函數(shù)體。內(nèi)容與普通函數(shù)一樣,不過(guò)除了可以使用參數(shù)之外,還可以使用所有捕獲的變量。
并發(fā)編程
并發(fā)與并行的區(qū)別:
并發(fā):同一時(shí)間段內(nèi)可以交替處理多個(gè)操作
并行:同一時(shí)間段內(nèi)同時(shí)處理多個(gè)操作
并發(fā)的兩種模式:
1.多進(jìn)程并發(fā):多個(gè)進(jìn)程獨(dú)立地運(yùn)行,它們之間通過(guò)進(jìn)程間常規(guī)的通信渠道傳遞訊息(信號(hào),套接字,文件,管道等),這種進(jìn)程間通信不是設(shè)置復(fù)雜就是速度慢
2.多線程并發(fā):線程就像輕量級(jí)的進(jìn)程,每個(gè)線程相互獨(dú)立運(yùn)行,但它們共享地址空間。在多線程編程中,我們必須確保每個(gè)線程鎖訪問(wèn)到的數(shù)據(jù)是一致的。
總結(jié)
- 上一篇: HTML5期末大作业:一款基于HTML+
- 下一篇: centos安装open-jdk8