當前位置: 華文問答 > 數碼

Modern C++有哪些能真正提升開發效率的語法糖?

2018-10-18數碼

不知道要多現代才叫「現代c++」。

我覺得除了auto,lambda,以及可變參數樣版這些「明星」特性,std::weak_ptr 和std::enable_shared_from_this 也是一組特別能提高編程效率的特性。

因為這組特性可以讓我們很輕松地實作一種編程模型——就是在主執行緒建立一個物件,其內部啟動了若幹子執行緒,並且將this的弱指標傳遞到子執行緒裏面去,子執行緒迴圈lock這個弱指標,並做一些操作,lock失敗則執行緒結束。

程式碼大致長這樣:

#include <memory> #include <SomeThreadLib> template < typename ContextType > class MyThread : public Thread < ContextType > { virtual void exec () { for (;;) { auto pContext = this . getContext (). lock (); if ( ! pContext ) { break ; } // do something } } }; class Manager : public std :: enable_shared_from_this < Manager > { MyThread < Manager > thread_ ; // ... void start () { // weak_from_this是C++17的新API this . thread_ . run ( weak_from_this ()); } }; int main () { auto mgr = std :: make_shared < Manager > (); mgr -> start (); // ... // mgr被銷毀的同時, 子執行緒開始結束 mgr = nullptr ; // ... }

如果沒有這組特性,實作類似的模型要寫很多附加程式碼,去保證執行緒安全和記憶體不泄露。