2010-04-21 2 views
2

이것은 이전에 질문 한 내용을 더 잘 이해하는 내용입니다.Objective-C++에서 boost :: shared_ptr

나는 다음 목표 - C 내가 부스트 :: shared_ptr의 (나는이 문제에 대해 선택의 여지가에 cppobj를 사용할 필요가 전혀 다르게 OBJ를 만드는 그런

@interface OCPP 
{ 
    MyCppobj * cppobj; 
} 
@end 

@implementation OCPP 

-(OCPP *) init 
{ 
    cppobj = new MyCppobj; 
} 
@end 

객체 ++이 그것은의 일부 내가 바꿀 수없는 거대한 도서관)

@interface NOBJ 
-(void) use_cppobj_as_shared_ptr 
{ 
    //get an OCPP obj called occ from somewhere.. 
    //troubling line here 
} 
@end 

나는 다음을 시도해 보았는데 실패했다 : 나는 cppobj 합성을 시도했다. 그런 다음 "문제가되는 줄"에 shared_ptr을 다음과 같이 작성했습니다.

MyCppobj * cpp = [occ cppobj]; 
bsp = boost::shared_ptr<MyCppobj>(cpp); 

처음에는 잘 작동합니다. 그런 다음 NOBJ를 파괴하고 다시 만듭니다. 내가 cppobj에 갔을 때 사라졌어. 아마도 shared_ptr은 더 이상 필요하지 않으며 그것을 사용하지 않기로 결정했습니다.

그래서 도움이 필요합니다. cppobj를 어떻게 살아있을 수 있습니까?

cppobj를 파괴하지 않고 bsp (또는 cppobj에 대한 참조)를 파괴 할 수있는 방법이 있습니까?

+0

init 메소드에서 아무 것도 반환하지 않습니다. 일반적으로 'self'를 반환하고 반환 유형은 'id'입니다. ObjC++에서도 마찬가지입니다. – MKroehnert

답변

3

shared_ptr은 사용자 지정 할당 취소를 지원합니다. 당신이 할 수있는 일은, 아무것도하지 마십시오.

void no_destroy(MyCppObj*) 
{} 

bsp = boost::shared_ptr<MyCppObj>(cpp, &no_destroy); 
1

왜 MyCppObj의 인스턴스를 저장하는 OCPP 대신 MyCppobj * cppobj;boost::shared_ptr<MyCppObj> cppobj;을 사용할 수 있습니까?

+0

그러면이 shared_ptr을 어떻게 전달합니까? 나는 그것을 시도했는데 어떤 이유로 그것이 실패했다. –

+0

"- (boost :: shared_ptr ) getCppobj {return cppobj;}"와 같은 메소드를 OCPP 클래스에 추가하고이 메소드를 통해 cppobj 멤버에 액세스하십시오. 이제 포인터는 OCPP 인스턴스에 속하므로이 인스턴스가 할당 해제 될 때만 삭제됩니다. – MKroehnert

관련 문제