我有以下代码在信号的回调之一期间删除信号:
#include <iostream>
#include <boost/signals2/signal.hpp>
struct Foo {
boost::signals2::signal<void(int)> signal;
};
std::vector<Foo> foos;
foos.emplace_back(Foo());
std::vector<int> values;
auto connection = boost::signals2::scoped_connection(foos[0].signal.connect([&](int x) {
foos.clear(); // delete the foos here, where we will be calling from below
values.emplace_back(1);
}));
foos[0].signal(1);
std::cout << "values.size()=" << values.size() << "\n";
我只是在这种“工作”中很幸运(因为它是未定义的行为)还是在信号2中有一些魔术指针计数阻止我把脚吹走?