簡體   English   中英

從目標C使用C ++:如何分配/取消分配?

[英]Using C++ from Objective C : how to allocate/deallocate?

當前,我的Objective C類使用C ++對象,方法是在創建所有者時執行一個new ,並在銷毀它時調用delete 但是還有另一種方法嗎? 我希望能夠聲明一個auto_ptr其作用域將持續目標C類的生命周期。

好的,讓我假設您在Mac上使用的是C ++和Objective-C,如果我沒錯,那么您很可能在使用X代碼。 因此,如果您轉到項目的屬性(信息)。 您可以檢查編譯選項(GCC)。 在那里,有一個啟用C ++構造函數/析構函數的選項(在Cocoa項目中默認情況下處於關閉狀態)。

然后,您會得到類似默認值的C ++作用域,但是我用的不多,而且模板代碼過多(Boost)也遇到了問題。

另外,我認為除了在GCC上工作的一些好人之外,沒有人正式支持這一點。 因此,我建議您對此類內容進行單元測試,並注意任何可能出錯的地方。

盡管如此,對於我作為C ++的人來說,能夠在Objective-C中使用C ++是一種解脫,而風險是值得的:)

如果您什至希望保留我們作為開發人員留下的一點點理智,那么您就不會這樣做。 最好delete您的C ++對象。 通常,雖然可以逐行混合使用Objective-C和C ++是安全的,但不要指望運行時支持像混合生命周期這樣的花哨的事情。 通常,可以在調用obj-c類的dealloc時安全地銷毀對象,但除此之外,不要期望混合類作用域並且不要哭泣。

在Xcode中,我正在閱讀“ Objective-C編程語言”,標題為“將C ++與Objective-C一起使用”。 我沒有嘗試過,但是它說您可以將C ++類用作實例變量。 它使用零參數構造函數初始化C ++類的所有實例變量。 在dealloc中,析構函數以反向實例變量聲明順序調用。

我剛遇到OCPtr,與Cocoa一起評論Boost :: shared_ptr 兩者都使用一個智能的引用計數指針(一個指針,該指針為您管理所有引用計數以進行分配等運算符)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM