lamda和多线程有什么关系?或者说,不用lamda,多线程本身该跑飞还是会跑飞
我的理解
如果lamda没有捕获/访问额外的变量,全部都靠传入参数,那么它就是一个实现了运算符()的匿名对象,这个对象除了一个()运算符,没有其它成员变量,运行结果取决于传入参数以及函数体的逻辑
如果lamda有捕获/访问周边的变量,则它就是一个匿名的、除了运算符()之外,还保存了捕获变量的(值或者引用)的一个对象,运行结果不仅取决于传入参数以及函数体的逻辑,还会被捕获的变量影响。至于跑飞,则是因为捕获的变量有的是引用,有的虽然是值,但是实际上有公共的引用计数,所以是这些捕获导致的跑飞,而这些如果会导致跑飞,你不用lamda,用别的方式传递这些捕获的变量,该跑飞还是会跑飞
所以,这个多线程跑飞的锅,和lamda没关系
【 在 xiaoju 的大作中提到: 】
: 多线程很容易搞出来循环引用,用rc处理不了
:
--
FROM 113.120.108.*