Ускорение ссылок на сигнал Объект вне области видимости?

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));

...
}

Теперь временный объект, возвращенный предыдущим boost :: bind, выходит из области видимости и уничтожается.
Однако временный объект передается в AAA :: Connect по ссылке.
Теперь допустим, что в какой-то момент вызывается объект a.FireSignal (), вызывает ли сигнал объект функции, который уже уничтожен ??? Как это работает иначе ???

0

Решение

Он делает копию и хранит ее.

Результат вашего к boost::bind предъявлено обвинение, чтобы построить slot_type который хранит это как член, а затем, как только он передается signal::connect сигнал хранит slot_type, что означает копию вашего bind результат хранится в signal и это тот, который используется и вызывается при срабатывании сигнала.

Я не могу найти место, где это конкретно и прямо сказано, но вы можете более или менее сделать вывод из:

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]