boost :: bind的实例是否在其生命周期内保留了shared_ptr?

时间:2014-04-28 23:46:12

标签: boost boost-bind

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。

1 个答案:

答案 0 :(得分:2)

是,boost::bind(以及std::bindcreates functor that holds copies参数,但不能指望所制作的副本数量。因此,您可以假设,在(B)点,参考数量大于点(A)。当然,当仿函数被解除时,它所持有的所有shared_ptr都会被释放。