Objective-C ++中的析构函数

时间:2010-06-28 20:11:19

标签: objective-c cocoa objective-c++

我有一个Objective-C ++类,它包含一些诚实的C ++对象指针。

当Obj-C ++类被销毁时,它会立即调用dealloc吗?如果是这样,那么通过放置

来破坏C ++类是最好的方法
delete obj
在dealloc方法中

2 个答案:

答案 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,在该页面下方。