【发布时间】:2011-03-09 07:48:16
【问题描述】:
我有一个 Objective-C++ 类,其中包含一些诚实的 C++ 对象指针。
当 Obj-C++ 类被销毁时,它会立即调用 dealloc 吗?如果是这样,那么通过放置
来销毁 C++ 类是最好的方法delete obj
在dealloc方法中?
【问题讨论】:
标签: objective-c cocoa objective-c++
我有一个 Objective-C++ 类,其中包含一些诚实的 C++ 对象指针。
当 Obj-C++ 类被销毁时,它会立即调用 dealloc 吗?如果是这样,那么通过放置
来销毁 C++ 类是最好的方法delete obj
在dealloc方法中?
【问题讨论】:
标签: objective-c cocoa objective-c++
作为对 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,位于该页面下方。
【讨论】:
std::unique_ptr
我想当你说“Obj-C++ 类”时,你的意思是一个 Objective-C 类,它恰好包含一些 C++ 类。
Objective-C 类在销毁时不会调用 dealloc;将 dealloc 消息发送给它们会破坏它们。
有了一点迂腐,如果你的 init 方法实例化了 obj 那么,是的,在 dealloc 中调用 delete obj:
-(void)dealloc {
delete obj;
[super dealloc];
}
【讨论】:
[super dealloc] 回答 here
[super dealloc] 与 ARC 不兼容。