Question

Actuellement, mes classes Objective C utilisent des objets C ++ en effectuant un nouveau lors de la création du propriétaire et en appelant delete lors de sa destruction. Mais y a-t-il un autre moyen? J'aimerais pouvoir déclarer, par exemple, un auto_ptr dont la portée dure la durée de vie de la classe Objective C.

Était-ce utile?

La solution

Bien, supposons que vous utilisez C ++ et Objective-C sur un Mac. Si je ne me trompe pas, vous utilisez probablement X-code. Donc, si vous allez dans les propriétés (info) de votre projet. Vous pouvez vérifier les options de compilation (GCC). Une option permet d’activer les constructeurs / destructeurs C ++ (désactivée par défaut dans les projets Cocoa).

Ensuite, vous obtenez une portée C ++ similaire à celle utilisée par défaut, mais je ne l'ai pas beaucoup utilisée et j'ai eu des problèmes avec le code de modèle lourd (Boost).

En outre, je ne pense pas que quiconque soutienne officiellement cela à part quelques bonnes personnes travaillant sur GCC. Je recommanderais donc à votre unité de tester n'importe quoi de la sorte et de garder à l'esprit que tout ce qui pourrait mal tourner pourrait se produire.

Néanmoins, pouvoir utiliser C ++ dans Objective-C, pour moi en tant que personne travaillant en C ++, est un soulagement et les risques valent les avantages:)

Autres conseils

Si vous avez le moindre espoir de conserver le peu de raison que nous avons laissée en tant que développeurs, vous ne le ferez pas. Il est préférable de supprimer vos objets C ++. En général, même s'il est prudent de mélanger ligne par ligne Objective-C et C ++, ne vous attendez pas à ce que le moteur d'exécution prenne en charge quelque chose de fantaisiste, comme le mélange des durées de vie. En général, vous pouvez détruire vos objets en toute sécurité lorsque le dealloc de votre classe obj-c est appelé, mais ne vous attendez pas à cela, ne vous attendez pas à mélanger la portée de la classe et à ne pas pleurer.

Dans Xcode, je lis "Le langage de programmation Objective-C", la section intitulée "Utilisation de C ++ avec Objective-C". Je ne l'ai pas essayé, mais il est dit que vous pouvez utiliser les classes C ++ comme variables d'instance. Il utilise le constructeur zéro argument pour initialiser les variables d'instance qui sont des classes C ++. Dans dealloc, les destructeurs sont appelés dans l’ordre de déclaration de la variable d’instance inverse.

Je viens de tomber sur OCPtr et un commentaire sur Boost :: shared_ptr with Cocoa . Les deux utilisent un pointeur de comptage de référence intelligent (un qui gère tout le comptage de référence pour vous pour les opérateurs d'affectation, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top