boost绑定是否会增加shared_ptr参数的ref计数?例如,请使用以下代码:
void myFunc(boost::shared_ptr<MyClass> in) {
in->doThing();
}
void myOtherFunc() {
{
boost::shared_ptr<MyClass> p = ...;
// A
boost::function<void(boost::shared_ptr<MyClass>)> f = boost::bind(&myFunc, p);
// B
}
// C
}
如果bind确实增加了引用计数,则ref应为A,1,B为2,C为0。
答案 0 :(得分:2)
是,boost::bind
(以及std::bind
)creates functor that holds copies参数,但不能指望所制作的副本数量。因此,您可以假设,在(B)点,参考数量大于点(A)。当然,当仿函数被解除时,它所持有的所有shared_ptr
都会被释放。