欢迎光临散文网 会员登陆 & 注册

(三) c++ 初始化、线程、回调函数与lambda表达式

2023-04-01 17:54 作者:FineClassFuture  | 我要投稿

初始化

    一开始学C++,都是被告知说使用初始化列表(可以保证初始化顺序)。

    但是呢,一个类内成员变量很多时,初始化列表会变得很长,即使折行也使得构造函数太难看了。

    这时可以使用定义时初始化。《Effective Modern C++》条款7 对象初始化 {} vs. ()

    习惯了C就会习惯使用0或者NULL,但在C++中《Effective Modern C++》条款8 优先选用nullptr


自己的思想:

    1. 保持纯粹的初始化,不使用如下行为

    2. 应该是优先使用{}来初始化吧。

    3. 申请/释放:在明确使用情况下使用C++智能指针,否则继续保持C思维,自己申请自己释放(生命周期掌握在自己手里,才能更好地去统筹资源)



线程

    在Linux下,std::thread封装自pthread,所以是否有必要使用std::thread?

    既然是学习,那就用吧

    thread_local C和C++都有,线程生命周期内都存在,所以利用thread_local可以做一些提高效率的事情:(来自网络文章介绍)

正常情况下线程生命周期内pid/tid都不会变

线程有时候需要睡眠:(来自网络文章介绍)

该质疑是网络文章介绍中的质疑

习惯C思维的简单封装

atomic只保证自己,可以做自旋锁,但不能做互斥锁来保护资源

做个简单提示   

其他

没考虑异常安全,可能存在资源泄漏问题


回调函数

    (都是没有接触学习过的新知识)

    使用std::function类型指针    

    同时《Effective Modern C++》条款9 用using替代typedef

    使用回调者很简单

    被回调者怎么传入?

    std::function和std::bind

    《Effective Modern C++》条款34 优先lambda式,而非bind

    视频说的情况还没完全理解

    目前就简单使用lambda表达式做中转

相对于std::bind更明了

    

目前运行良好,以后有问题再继续深入学习。


(三) c++ 初始化、线程、回调函数与lambda表达式的评论 (共 条)

分享到微博请遵守国家法律