2014-04-28 10 views
1

增强绑定是否会增加shared_ptr参数在其生命周期中的引用计数?例如,采取以下的代码:如果绑定不递增引用计数boost :: bind的一个实例是否为其生命周期保留了一个shared_ptr?

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 
} 

,参考应该是1在A,2在B和0在C.

+0

我想你会发现这个问题的第一个答案也回答你:[boost-async-functions-and-shared-ptrs](http://stackoverflow.com/questions/11356742/boost-async-功能和 - 共享师生比) – kenba

回答

1

是,boost::bind(以及std::bindcreates functor that holds copies的参数,但不能指望复制的数量。所以,你可以假设的是,在(B)点,参考点的数量大于点(A)的点数。当然,当函数被破坏时,它所持有的所有shared_ptr都被释放。