2010-06-28 86 views
13

我有一個包含一些誠實的C++對象指針的Objective-C++類。Objective-C++中的析構函數

當Obj-C++類被銷燬時,它是否立即調用dealloc?如果是這樣,那麼通過在dealloc方法中放置

delete obj 

來破壞C++類的最好方法是什麼?

回答

23

我推測當你說「Obj-C++類」時,你的意思是一個恰好包含一些C++類的Objective-C類。

Objective-C類在被銷燬時不會調用dealloc;它們被dealloc消息發送給它們而被銷燬。

有了書卷氣該位的出路,如果你的init方法實例的obj然後,是的,請致電的dealloc delete obj

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

ARC禁止發送dealloc消息 - 在使用ARC時不需要調用'[super dealloc]'作爲回答[here](http://stackoverflow.com/questions/7292119/custom-dealloc-using-arc-objective -c) – benjineer 2013-11-26 04:37:49

+0

@benjineer ARC在寫這個答案時還沒有發佈,但你說的[super dealloc]與ARC不兼容。 – 2013-12-03 17:06:49

7

爲補充弗蘭克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,該頁面有點向下。

+0

只要你包裹它,你也需要存儲指針,例如在'std :: unique_ptr'中 – Sebastian 2015-08-25 09:33:02