Функция connect
принимает объект boost::function
, который по сути является универсальной оболочкой для всего , для которого определено operator()
. Поэтому это так же безопасно, как и то, что вы связываете.
Например, это достаточно безопасно:
boost::shared_ptr<ClassName> pValue = boost::make_shared<ClassName>(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
Это достаточно безопасно, поскольку он хранит boost::shared_ptr
как часть своих данных.
ClassName *pValue = new ClassName(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
Это условно безопасно. Мгновенно становится небезопасным, если это соединение все еще существует, и вы выполняете delete pValue
.
Лично я не очень верю в "условно-безопасный", но это зависит от вас. Суть в том, что все, что вы связываете с boost::bind
, должно продолжать существовать, пока оно связано.