La funzione connect
prende un oggetto boost::function
, che è sostanzialmente un involucro generico intorno nulla che ha un operator()
definito per esso. Pertanto è esattamente sicuro quanto ciò che sei vincolante.
Ad esempio, questo è ragionevolmente sicuro:
boost::shared_ptr<ClassName> pValue = boost::make_shared<ClassName>(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
Questa è ragionevolmente sicuro perché memorizza un boost::shared_ptr
come parte dei suoi dati.
ClassName *pValue = new ClassName(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
Questo è condizionatamente sicura. Diventa immediatamente pericoloso se la connessione esiste ancora ed è possibile eseguire delete pValue
.
Personalmente, non ripongo molta fiducia in "condizioni di sicurezza", ma dipende da voi. Il punto è che tutto ciò che si lega a boost::bind
deve continuare ad esistere finché è legato.
fonte
2011-10-10 07:50:37