这是对我之前提出的一个问题的更好理解。
我有以下 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 并重新创建它。当我使用 cpp obj 时,它就消失了。据推测,shared_ptr 认为不再需要它并废除了它。
所以我需要帮助。如何让 cppobj 保持活力?
有没有办法在不破坏cppobj的情况下破坏bsp(或者它对cppobj的引用)?
shared_ptr
支持自定义解除分配器。你能做的,就是什么也不做。
void no_destroy(MyCppObj*)
{}
bsp = boost::shared_ptr<MyCppObj>(cpp, &no_destroy);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)