我有一个Objective-C ++类,它包含一些诚实的C ++对象指针。
当Obj-C ++类被销毁时,它会立即调用dealloc吗?如果是这样,那么通过放置
来破坏C ++类是最好的方法delete obj
在dealloc方法中?
答案 0 :(得分:26)
我认为当你说“Obj-C ++类”时你的意思是一个恰好包含一些C ++类的Objective-C类。
Objective-C类在销毁时不会调用dealloc;通过向他们发送dealloc消息来销毁它们。
如果你的init方法实例化了obj,那么,是的,在dealloc中调用delete obj
:
-(void)dealloc {
delete obj;
[super dealloc];
}
答案 1 :(得分:8)
作为Frank Shearar正确答案的补充,只要你使用的是OSX 10.4或更高版本的SDK(你可能就是这样;虽然我不确定这里的iPhone运行时)你也可以包含Objective-C的C ++成员类,即不求助于指针。早期版本的OSX SDK中的问题是C ++成员的构造函数和析构函数根本不会被调用。但是,通过指定fobjc-call-cxx-cdtors
编译器选项(在XCode中将其公开为设置GCC_OBJC_CALL_CXX_CDTORS
),将调用ctor和dtor。另请参阅Apple docs,在该页面下方。