boost::signals2 提供了使用智能指针的连接管理。可以通过下面的代码生成智能连接:
using namespace boost::signals2;
boost::shared_ptr<MyClass> class_ptr; // 这是观察者的智能指针
signal<void(int)> shoter; // 这就是我们的信号发射器了
typedef signal<void(int)>::slot_type slot_type; // 信号带 int 参数,无返回值
slot_type myslot(func, class_ptr.get(), _1); // 注意这个 _1, 会用 bind 的朋友们应该知道它是什么吧,是的,它内部使用了bind。还有,这里需要用 get 获取裸指针,不能直接用智能指针,猜猜是为什么?
boost::signals2::connection c=shoter.connect(myslot.track(class_ptr)); // 好了,产生连接吧
shoter(100); // 发射信号吧