c++的lambda 可以捕获this指针,使lambda可以在自定义的function内使用类的成员函数,这是因为捕获this后隐式的在成员变量前加了this
但是需要注意的是,这里捕获this,不是以一种拷贝的方式,更像是一种引用(或者别名,描述可能不准确),当在外面这个类的生命周期结束时,lambda内部还在调用这个类的成员函数,那么就会出错
我遇到的问题是 捕获了类A的this,对A的一个shared_ptr进行操作。偶然会出现shared_ptr的内部基类spt_count_base的报错。看了下这个shared_ptr 的use_count和weak_count都是0,
这就非常奇怪。shared_ptr计数是线程安全的,(但是实际指向对象和计数不是原子操作),并且访问这个sptr也加了锁,为什么会出现被释放了的情况。
大概再说下情景
class A
{
shared_ptr sptr;
sptr.func = this{ do something};
}
class B
{
shared_ptr