2010-04-21 62 views
2

這更好地理解了我以前的問題。Objective-C++中的boost :: shared_ptr

我有以下的Objective-C++對象

@interface OCPP 
{ 
    MyCppobj * cppobj; 
} 
@end 

@implementation OCPP 

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

然後我創建了一個完全不同的obj這需要一個boost :: shared_ptr的(我在這個問題上沒有選擇使用cppobj,它的一部分巨大的圖書館,我不能改變)

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

我試過以下,並失敗:我試圖合成cppobj。然後我通過以下方式創建了一個名爲「troublebling line」的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 2010-04-26 22:30:40

回答

3

shared_ptr支持自定義釋放器。你可以做的是,什麼也不做。

void no_destroy(MyCppObj*) 
{} 

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

爲什麼不使用boost::shared_ptr<MyCppObj> cppobj;OCPP,而不是MyCppobj * cppobj;存儲MyCppObj的實例?

+0

那麼我該如何傳遞這個shared_ptr?我試過了,出於某種原因失敗了。 – 2010-04-26 15:54:58

+0

向OCPP類添加如下方法:「 - (boost :: shared_ptr )getCppobj {return cppobj;}」並通過此方法訪問成員cppobj。 現在指針屬於OCPP的實例,只有當這個實例被解除分配時纔會被刪除。 – MKroehnert 2010-04-26 22:28:25

相關問題