Objective-C++ 中的析构函数

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

当Obj-C++类被销毁时,它是否立即调用dealloc方法?如果是这样,那么销毁C++类的最佳方法是将

delete obj

在dealloc方法中吗?

2个回答

32

我猜您说的"Obj-C++ class"指的是包含一些C++类的Objective-C类。

当Objective-C类被销毁时,它们不会调用dealloc方法;它们是通过发送dealloc消息来销毁的。

既然你的init方法实例化了obj,那么在dealloc中调用delete obj即可:

-(void)dealloc {
  delete obj;
  [super dealloc];
}

9
ARC禁止发送dealloc消息 - 在使用ARC时不需要调用[super dealloc],具体参见此处的回答。 - Benjineer
2
@benjineer 当回答这个问题时,ARC还没有发布,但你是正确的,[super dealloc]与ARC不兼容。 - Tin Can

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文档,该页面下方有一点解释。

当您需要存储指针时,只要将其封装在std::unique_ptr中,它也可以正常工作。 - Sebastian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接