2011-07-29 1 views
4

인수 중 하나를 소유하는 함수가있는 경우 Boost.Python에 해당 함수를 공개 할 때 사용해야하는 호출 정책이 있습니까?Boost.Python : 인수를 소유하십시오.

void func(MyClass* obj) 
{ 
    // Code that takes possession of `obj` 
} 
+0

내가 궁금한 점이 있지만, 다른 함수가 전달 된 객체를 수정한다고 걱정 되니? 그렇다면 (그리고 당신이 함수를 수정할 수 있다면) 아마도'boost :: weak_ptr'이 당신이 원하는 것입니다. – Jir

+0

"소유 하시겠습니까?"라는 의미는 무엇입니까? –

+0

다음과 같이 소유하고 삭제하십시오. 또는 어딘가에 저장할 수도 있고 나중에 나중에 삭제할 수도 있습니다. –

답변

1

boost::weak_ptr을 사용할 수 있다고 생각합니다.

using boost::shared_ptr; 
using boost::weak_ptr; 

func (weak_ptr<MyClass> wp) 
{ 
    shared_ptr<MyClass> sp = wp.lock(); 
    if (sp) 
    // sp stays alive until it goes out of scope or is reset 
} 

기본적으로,이 boost::weak_ptr의 문서에서 제공되는 예입니다. 여기에 reference이 있습니다.

+0

함수가'shared_ptr'을 사용하면 함수는 똑같이 작동합니다 : 함수가 반환되기 전에 객체가 삭제되지 않도록합니다. 잠금 코드를 저장하면됩니다. 차이점은 무엇입니까? – eudoxos

+0

내가 제대로 이해했다면,'weak_ptr' + locking을 사용하지 않으면,'shared_ptr'가 가리키는 객체를 아무도 뒤지는 것을 확신 할 수 없습니다. 'lock()'을 사용하여 생성 된'shared_ptr'은 잠금 시점에'weak_ptr'에 의해 가리켜 진 객체를 가리키고'shared_ptr'가 범위를 벗어날 때까지 객체가 존속하도록합니다. – Jir

+0

[docs] (http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/weak_ptr.htm)를 참조하십시오. 'weak_ptr'은 (아마도) 나중에 사용되는 공유 객체에 대한 포인터를 그 포인터의 삭제를 막지 않고 유지하는 데 유용합니다. 여기서'weak_ptr'을 얻고 즉시'shared_ptr'로'lock()'으로 변환합니다. 목적은 무엇입니까? – eudoxos