2

这是对我之前提出的一个问题的更好理解。

我有以下 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。然后我通过以下方式在“麻烦行”中创建了一个 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

为什么不使用boost::shared_ptr<MyCppObj> cppobj;inOCPP而不是MyCppobj * cppobj;存储 MyCppObj 的实例?

于 2010-04-26T15:26:40.017 回答