这是对我之前提出的一个问题的更好的理解。
我有以下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的引用)?
发布于 2010-04-21 10:51:31
shared_ptr支持自定义解除分配器。你能做的就是什么都不做。
void no_destroy(MyCppObj*)
{}
bsp = boost::shared_ptr<MyCppObj>(cpp, &no_destroy);发布于 2010-04-26 23:26:40
为什么不使用OCPP中的boost::shared_ptr<MyCppObj> cppobj;而不是MyCppobj * cppobj;来存储MyCppObj的实例?
https://stackoverflow.com/questions/2679967
复制相似问题