C 常用新特性(上)
下面是正文:
auto類型推導
auto可以讓編譯器在編譯器就推導出變量的類型,看代碼:
利用auto可以通過=右邊的類型推導出變量的類型。
什么時候使用auto呢?簡單類型其實沒必要使用auto,然而某些復雜類型就有必要使用auto,比如lambda表達式的類型,async函數的類型等,例如:
智能指針
C 11新特性中主要有兩種智能指針std::shared_ptr和std::unique_ptr。
那什么時候使用std::shared_ptr,什么時候使用std::unique_ptr呢?
當所有權不明晰的情況,有可能多個對象共同管理同一塊內存時,要使用std::shared_ptr;
而std::unique_ptr強調的是獨占,同一時刻只能有一個對象占用這塊內存,不支持多個對象共同管理同一塊內存。
兩類智能指針使用方式類似,拿std::unique_ptr舉例:
std::lock相關
C 11提供了兩種鎖封裝,通過RAII方式可動態的釋放鎖資源,防止編碼失誤導致始終持有鎖。
這兩種封裝是std::lock_guard和std::unique_lock,使用方式類似,看下面的代碼:
普通情況下建議使用std::lock_guard,因為std::lock_guard更加輕量級,但如果用在條件變量的wait中環境中,必須使用std::unique_lock。
條件變量
條件變量是C 11引入的一種同步機制,它可以阻塞一個線程或多個線程,直到有線程通知或者超時才會喚醒正在阻塞的線程,條件變量需要和鎖配合使用,這里的鎖就是上面介紹的std::unique_lock。
這里使用條件變量實現一個CountDownLatch:
原子操作
C 11提供了原子類型std::atomic,用于原子操作,使用這種方式既可以保證線程安全,也不需要使用鎖來進行臨界區保護,對一些普通變量來說尤其方便,看代碼:
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的C 常用新特性(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票收上影线是散户太多吗?
- 下一篇: 境外向国内汇款限额?