- 博客(499)
- 收藏
- 关注
原创 一篇文章了解lambda表达式的本质
其实这里就可以看出,值捕获时,编译器会把捕获到的值作为类的成员变量,并且变量是以值的方式传递的。需要注意的时,如果所有的参数都是值捕获的方式,那么生成的operator()函数是const函数的,是无法修改捕获的值的,哪怕这个修改不会改变lambda表达式外部的变量,如果想要在函数内修改捕获的值,需要加上关键字 mutable。一个lambda表达式基本上就是一个函数,但它没有名字。(备注:这里的编译的翻译结果并不和真正的结果完全一致,只是把最主要的部分体现出来,其他的像类到函数指针的转换函数均省略)
2024-04-18 23:58:16 825 1
原创 调用pthread_create时系统做了哪些事情
需要注意的是,在多核处理器上,新创建的线程可能立即在另一个核心上开始执行,而调用pthread_create的线程继续在原来的核心上执行。退出线程时(通过返回从启动例程或调用pthread_exit)会释放线程的执行上下文和部分资源,但线程的标识符和某些资源会保持不变,直到调用pthread_join或采取类似措施以回收这些资源。初始化寄存器和线程上下文:设置新线程的程序计数器(PC)、堆栈指针(SP)等寄存器,并初始化新线程的执行上下文以准备运行。线程标识符分配:系统为新线程分配一个唯一的线程ID。
2024-04-17 22:46:54 204
原创 C++ 就地构造对象
这是因为在C++的内存模型中,当对象被创建(无论是通过新运算符还是其他方式)时,它会占据一片内存,并且在这片内存上运行其构造函数。但是,在使用就地构造时,我们只是在已经分配的内存上直接构造了对象,没有额外的机制来跟踪这片内存或者对象的生命周期,因此,我们需要手动管理这块内存和对象的生命周期。使用placement new要非常小心,确保分配的内存块足够大,并且正确管理对象的生命周期,包括手动调用析构函数和释放内存。此外,在指定内存位置上创建对象时,请确保该位置是合法的、对齐的,并且未被使用。
2023-10-07 16:09:05 276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人