根据我的实验(boost 1.49),boost::bind
它自己的实现不使用动态内存。使用此代码
#include <boost/bind.hpp>
int f(int a , int b) {
return a>b ? a+b : a-b;
}
int main()
{
auto a = boost::bind(f, _1, 2);
return a(0);
}
我尝试破解operator new
gdb 中的变体,但没有触发。所以我怀疑你的问题实际上boost::bind
是复制绑定参数(比较这两个 片段的输出)或调用参数。在这些中搜索可以在复制时分配内存的东西,并尝试摆脱它。
如果您使用的是 C++11 编译器,则可以完全摆脱困境boost::bind
并改用 lambda 函数。该示例将转换为
auto a = [&](int a1) { return f(a1, 2); }
如果您按值捕获对象,那只会复制。
编辑:使用您发布的代码,尝试将有问题的行更改为
TConstIterator pIt = std::find_if(rtContainer.begin(), rtContainer.end(),
boost::bind(&TValueType::bSameSocket, boost::cref(rtData), _1));
^^^^^^^^^^^
那应该会更好;如果没有,请报告。