16

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

当 Obj-C++ 类被销毁时,它会立即调用 dealloc 吗?如果是这样,那么是通过放置来破坏 C++ 类的最佳方法

delete obj

在dealloc方法中?

4

2 回答 2

31

我想当你说“Obj-C++ 类”时,你的意思是一个恰好包含一些 C++ 类的 Objective-C 类。

Objective-C 类在销毁时不会调用 dealloc;他们通过将 dealloc 消息发送给他们而被销毁。

有了一点迂腐,如果你的 init 方法实例化了 obj,那么,是delete obj的,调用 dealloc:

-(void)dealloc {
  delete obj;
  [super dealloc];
}
于 2010-06-28T20:15:15.503 回答
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,在该页面下方。

于 2010-06-28T20:28:12.837 回答