C++ 将std::bind与boost::signals2一起使用安全吗?

C++ 将std::bind与boost::signals2一起使用安全吗?,c++,boost,bind,signals,member-functions,C++,Boost,Bind,Signals,Member Functions,使用std::bind将成员函数传递给boost::signals2::signal::connect()安全吗?换句话说,boost::bind和std::bind可以互换吗 它是用VC++2010 SP1编译的,但模板代码太离谱了,我担心我可能会冒险进入未定义的行为领域。我在这方面没有经验,因为我希望connect采用任何实现有效函数调用操作符的方法。使用与签名匹配的任何函数或函数对象调用它应该是安全的,可以是boost::bind、std::bind或其他任何东西。Boost库被设计为通用

使用std::bind将成员函数传递给boost::signals2::signal::connect()安全吗?换句话说,boost::bind和std::bind可以互换吗


它是用VC++2010 SP1编译的,但模板代码太离谱了,我担心我可能会冒险进入未定义的行为领域。

我在这方面没有经验,因为我希望
connect
采用任何实现有效函数调用操作符的方法。使用与签名匹配的任何函数或函数对象调用它应该是安全的,可以是boost::bind、std::bind或其他任何东西。Boost库被设计为通用库,因此它们通常不会相互挑选实现细节。

函数采用一个
Boost::function
对象,它基本上是一个通用包装器,用于包装任何定义了
操作符()
的对象。因此,它与您绑定的内容一样安全

例如,这是相当安全的:

boost::shared_ptr<ClassName> pValue = boost::make_shared<ClassName>(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);
这是有条件的安全。如果该连接仍然存在,并且您执行
delete pValue
,则会立即变得不安全

就个人而言,我不太相信“有条件安全”,但这取决于你。关键是,只要绑定到
boost::bind
,绑定到的所有内容都必须继续存在

ClassName *pValue = new ClassName(...);
signal.connect(boost::bind(&ClassName::FuncName, pValue, ...);