boost :: shared_ptr в Objective-C ++ - PullRequest
       13

boost :: shared_ptr в Objective-C ++

2 голосов
/ 21 апреля 2010

Это лучшее понимание вопроса, который у меня был раньше.

У меня есть следующий объект 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?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

shared_ptr поддерживает пользовательские освобождающие средства. Что вы можете сделать, это ничего не делать.

void no_destroy(MyCppObj*)
{}

bsp = boost::shared_ptr<MyCppObj>(cpp, &no_destroy);
1 голос
/ 26 апреля 2010

Почему бы не использовать boost::shared_ptr<MyCppObj> cppobj; в OCPP вместо MyCppobj * cppobj; для хранения экземпляра MyCppObj?

...