Objective-C中的析构函数&x2B+; 我有一个ObjuleC++类,包含一些C++对象指针。
当Obj-C++类被销毁时,它会立即调用dealloc吗?如果是这样,那么通过放置来破坏C++类的最好方法Objective-C中的析构函数&x2B+; 我有一个ObjuleC++类,包含一些C++对象指针。,objective-c,cocoa,objective-c++,Objective C,Cocoa,Objective C++,当Obj-C++类被销毁时,它会立即调用dealloc吗?如果是这样,那么通过放置来破坏C++类的最好方法 delete obj < P>我假定当你说“Obj-c++类”时,你指的是ObjuleC类,恰好包含一些C++类。 Objective-C类在被销毁时不调用dealloc;通过向他们发送dealloc消息,他们将被摧毁 如果你的init方法实例化了obj,那么,是的,在dealloc中调用delete obj: -(void)dealloc { delete obj; [sup
delete obj
delete obj
:
-(void)dealloc {
delete obj;
[super dealloc];
}
作为Frank Shearar正确答案的补充,假设您使用的是OSX 10.4或更高版本SDK(您可能是;虽然我不确定iPhone运行时),但您也可以包含ObjuleC类的C++成员,即不使用指针。OSX SDK的早期版本中的问题是C++成员的构造函数和析构函数根本不会被调用。但是,通过指定
fobjc call cxx cdtors
编译器选项(在XCode中,它作为设置GCC\u OBJC\u call\u cxx\u cdtors
公开),将调用ctor和dtor。另请参见该页下方。ARC禁止发送dealloc消息-当使用ARC作为应答时,无需调用[super dealloc]
。@benjineer在编写此应答时,ARC尚未发布,但您认为[super dealloc]是正确的
与ARC不兼容。如果需要存储指针,只要将其包装在std::unique\u ptr中,也可以使用此功能