Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中的析构函数&x2B+; 我有一个ObjuleC++类,包含一些C++对象指针。_Objective C_Cocoa_Objective C++ - Fatal编程技术网

Objective-C中的析构函数&x2B+; 我有一个ObjuleC++类,包含一些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

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

来破坏C++类的最好方法
delete obj

< P>我假定当你说“Obj-c++类”时,你指的是ObjuleC类,恰好包含一些C++类。

Objective-C类在被销毁时不调用dealloc;通过向他们发送dealloc消息,他们将被摧毁

如果你的init方法实例化了obj,那么,是的,在dealloc中调用
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中,也可以使用此功能