当前位置: 华文问答 > 数码

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 ; // ... }

如果没有这组特性,实现类似的模型要写很多附加代码,去保证线程安全和内存不泄露。