Это лучшее понимание вопроса, который у меня был раньше.
У меня есть следующий объект Objective-C ++
@interface OCPP
{
MyCppobj * cppobj;
}
@end
@implementation OCPP
-(OCPP *) init
{
cppobj = new MyCppobj;
}
@end
Затем я создаю совершенно другой объект, который должен использовать cppobj в boost :: shared_ptr (у меня нет выбора в этом вопросе, это часть огромной библиотеки, которую я не могу изменить)
@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 в живых?
Есть ли способ уничтожить bsp (или его ссылку на cppobj), не уничтожая cppobj?