Ceci est une meilleure compréhension d'une question que j'avais précédemment.boost :: shared_ptr dans Objective-C++
Je l'Objective-C suivant ++ objet
@interface OCPP
{
MyCppobj * cppobj;
}
@end
@implementation OCPP
-(OCPP *) init
{
cppobj = new MyCppobj;
}
@end
Ensuite, je crée une manière complètement différente obj qui a besoin d'utiliser cppobj dans un boost :: shared_ptr (je n'ai pas le choix en la matière, il fait partie d'un immense bibliothèque que je ne peux pas changer)
@interface NOBJ
-(void) use_cppobj_as_shared_ptr
{
//get an OCPP obj called occ from somewhere..
//troubling line here
}
@end
J'ai essayé ce qui suit et qui a échoué: J'ai essayé synthétisant cppobj. Ensuite, j'ai créé un shared_ptr dans "ligne troublante" de la manière suivante:
MyCppobj * cpp = [occ cppobj];
bsp = boost::shared_ptr<MyCppobj>(cpp);
Cela fonctionne très bien la première fois. Ensuite, je détruis le NOBJ et le recréer. Quand je suis pour cppobj c'est parti. Vraisemblablement shared_ptr a décidé que ce n'était plus nécessaire et l'a fait disparaître.
J'ai donc besoin d'aide. Comment puis-je garder cppobj en vie?
Y at-il un moyen de détruire bsp (ou c'est une référence à cppobj) sans détruire cppobj?
Vous ne renvoyez rien de la méthode init. Habituellement, vous retournez 'self' et le type de retour est 'id'. Je suppose que cela vaut aussi pour ObjC++. – MKroehnert