我有一個包含一些誠實的C++對象指針的Objective-C++類。Objective-C++中的析構函數
當Obj-C++類被銷燬時,它是否立即調用dealloc?如果是這樣,那麼通過在dealloc方法中放置
delete obj
來破壞C++類的最好方法是什麼?
我有一個包含一些誠實的C++對象指針的Objective-C++類。Objective-C++中的析構函數
當Obj-C++類被銷燬時,它是否立即調用dealloc?如果是這樣,那麼通過在dealloc方法中放置
delete obj
來破壞C++類的最好方法是什麼?
我推測當你說「Obj-C++類」時,你的意思是一個恰好包含一些C++類的Objective-C類。
Objective-C類在被銷燬時不會調用dealloc;它們被dealloc消息發送給它們而被銷燬。
有了書卷氣該位的出路,如果你的init方法實例的obj然後,是的,請致電的dealloc delete obj
:
-(void)dealloc {
delete obj;
[super dealloc];
}
爲補充弗蘭克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'中 – Sebastian 2015-08-25 09:33:02
ARC禁止發送dealloc消息 - 在使用ARC時不需要調用'[super dealloc]'作爲回答[here](http://stackoverflow.com/questions/7292119/custom-dealloc-using-arc-objective -c) – benjineer 2013-11-26 04:37:49
@benjineer ARC在寫這個答案時還沒有發佈,但你說的[super dealloc]與ARC不兼容。 – 2013-12-03 17:06:49