2

これは、私が以前に持っていた質問をよりよく理解しています。

次のObjective-C++オブジェクトがあります

@interface OCPP
{
    MyCppobj * cppobj; 
}
@end

@implementation OCPP

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

次に、boost::shared_ptr で cppobj を使用する必要がある完全に異なる obj を作成します (この問題には選択の余地がありません。変更できない巨大なライブラリの一部です)。

@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 への参照) を破棄する方法はありますか?

4

2 に答える 2

3

shared_ptrカスタム デロケーターをサポートします。あなたにできることは、何もしないことです。

void no_destroy(MyCppObj*)
{}

bsp = boost::shared_ptr<MyCppObj>(cpp, &no_destroy);
于 2010-04-21T02:51:31.490 に答える
1

MyCppObj のインスタンスを格納する代わりにboost::shared_ptr<MyCppObj> cppobj;inを使用しないのはなぜですか?OCPPMyCppobj * cppobj;

于 2010-04-26T15:26:40.017 に答える