C++ 增压信号引用对象超出范围? typedef boost::signals2::signal-signal\u t; AAA级{ 公众: 无效连接(常数信号:插槽类型和用户) { 返回m_信号连接(用户); } 无效火灾信号() { m_sig(); } 私人: 信号信号; }; //全球的 AAA a; BBB; //一些范围 { ... a、 连接(boost::bind(&BBB:foo,&b)); ... }
现在,上一个boost::bind返回的临时对象超出范围并被销毁 但是,临时对象通过引用传递给AAA::Connect。C++ 增压信号引用对象超出范围? typedef boost::signals2::signal-signal\u t; AAA级{ 公众: 无效连接(常数信号:插槽类型和用户) { 返回m_信号连接(用户); } 无效火灾信号() { m_sig(); } 私人: 信号信号; }; //全球的 AAA a; BBB; //一些范围 { ... a、 连接(boost::bind(&BBB:foo,&b)); ... },c++,boost,signals2,C++,Boost,Signals2,现在,上一个boost::bind返回的临时对象超出范围并被销毁 但是,临时对象通过引用传递给AAA::Connect。 现在让我们假设在某个时刻,调用了对象a.FireSignal(),该信号是否调用了一个已经被破坏的函数对象???否则它是如何工作的?它会复制并保存它 toboost::bind的结果用于构造一个插槽类型,该插槽类型将其存储为一个成员,然后将其传递给signal::connect后,信号将存储插槽类型,这意味着绑定结果的副本存储在信号中,这是信号触发时使用和调用的副本 我找不到
现在让我们假设在某个时刻,调用了对象a.FireSignal(),该信号是否调用了一个已经被破坏的函数对象???否则它是如何工作的?它会复制并保存它 to
boost::bind
的结果用于构造一个插槽类型
,该插槽类型将其存储为一个成员,然后将其传递给signal::connect
后,信号将存储插槽类型
,这意味着绑定
结果的副本存储在信号
中,这是信号触发时使用和调用的副本
我找不到一个地方具体地说了这句话,但你或多或少可以从以下几点得出结论:
BBB
)更有可能死亡,此外可能还有其他原因,这实际上取决于上下文。
typedef boost::signals2::signal<void ()> signal_t;
class AAA {
public:
void Connect(const signal_t::slot_type& subscriber)
{
return m_sig.connect(subscriber);
}
void FireSignal()
{
m_sig();
}
private:
signal_t sig;
};
// Global
AAA a;
BBB b;
// Some scope
{
...
a.Connect(boost::bind(&BBB:foo, &b));
...
}