La función connect
toma un objeto boost::function
, que es básicamente un contenedor genérico en torno nada que tiene un operator()
definido para ello. Por lo tanto, es exactamente tan seguro como lo que está vinculando.
Por ejemplo, este es razonablemente segura:
boost::shared_ptr<ClassName> pValue = boost::make_shared<ClassName>(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
Esta es razonablemente seguro, ya que almacena una boost::shared_ptr
como parte de sus datos.
ClassName *pValue = new ClassName(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
Ésta es condicionalmente seguro. Inmediatamente se vuelve inseguro si esa conexión aún existe y ejecuta delete pValue
.
Personalmente, no pongo mucha fe en "condicionalmente seguro", pero eso depende de usted. El punto es que todo lo que enlaza al boost::bind
debe continuar existiendo siempre que esté vinculado.