Destructeur en Objective-C++
J'ai un objectif-classe C++ qui contiennent certains honnête objet C++ les pointeurs.
Lorsque l'Obj-C++ de la classe est détruit ne remet dealloc immédiatement? Si oui, alors il est le meilleur moyen de détruire la classe C++ en mettant
delete obj
dans le dealloc méthode?
OriginalL'auteur John Smith | 2010-06-28
Vous devez vous connecter pour publier un commentaire.
Je suppose que lorsque vous dites "l'Obj-C++ de la classe" tu veux dire que l'Objective-C classe qui contient certaines des classes C++.
Objective-C classes ne pas appeler dealloc quand ils sont détruits, ils sont détruits par le dealloc message envoyé.
Avec un peu de pédantisme la route, si votre méthode init instancie obj alors, oui, appelez
delete obj
dans le dealloc:[super dealloc]
lors de l'utilisation de l'ARC comme réponse à iciL'ARC n'était pas encore sorti quand cette réponse a été écrit, mais il est exact que les
[super dealloc]
n'est pas compatible avec l'ARC.OriginalL'auteur Frank Shearar
Comme un complément à Frank Shearar de la réponse correcte, à condition que vous utilisiez le OSX 10.4 ou version ultérieure SDK (et vous l'avez sans doute; mais je ne suis pas sûr au sujet de l'iPhone runtime ici), vous pouvez également inclure C++ membres de l'Objective-C classes, c'est à dire sans avoir recours à un pointeur. Le problème dans les versions antérieures de l'OS x kit de développement a été que le constructeur et le destructeur de la membre C++ ne serait tout simplement pas appelé. Toutefois, en spécifiant le
fobjc-call-cxx-cdtors
l'option de compilateur (dans XCode, il est exposé que la mise enGCC_OBJC_CALL_CXX_CDTORS
), le ctor et dtor sera appelée. Voir aussi Apple docs, un peu en bas de cette page.std::unique_ptr
OriginalL'auteur harms