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