2014-04-28 4 views
1

boost bind는 shared_ptr 매개 변수의 ref 수를 증가시킵니다. 예를 들어, 다음 코드를 가지고 : 바인드는 심판이 카운트를 증가 않는 경우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 
} 

을 심판 C.

에서
+0

이 질문에 대한 첫 번째 답변도 귀하의 답변에 해당합니다. [boost-async-functions-and-shared-ptrs] (http://stackoverflow.com/questions/11356742/boost-async- 기능 - 공유 - ptrs) – kenba

답변

1

예, boost::bind (뿐만 아니라 std::bind B에서의에서 1, 2, 0이어야한다) creates functor that holds copies 매개 변수 중 하나를 만들 수 있지만 복사본 수를 계산할 수 없습니다. 그래서, 여러분이 생각할 수있는 것은 그 지점 (B)에서 참조의 수가 지점 (A)에서보다 큽니다. 확실히, functor가 detoxed 될 때, 붙들린 모든 shared_ptr은 풀어 놓입니다.