考虑一下:
#include <boost/signals2.hpp>
#include <iostream>
struct object_with_slot
{
void operator()()
{
std::cout << "Slot called!" << std::endl;
member = 50500;
}
int member;
};
int main()
{
boost::signals2::signal<void ()> sig;
object_with_slot * ptr = new object_with_slot;
sig.connect(*ptr);
delete ptr;
sig();
}
输出是“插槽调用!” 并且没有崩溃或任何事情。这就是为什么我有几个问题:
1)为什么没有崩溃?
2)为什么即使槽函数将某些东西分配给不存在的对象,也没有崩溃?
3)如何使信号自动跟踪其插槽的生命周期?我的意思是当插槽被破坏时,它会断开连接。
第 3 个问题是最重要的,因为我需要实现观察者模式,并且观察者(插槽)的生命周期通常不会是静态的(在应用程序运行的整个时间内)。