2

現在、Objective C クラスは、所有者が作成されたときに a を実行し、所有者が破棄されたときにnew呼び出すことによって、C++ オブジェクトを使用しています。deleteしかし、別の方法はありますか?auto_ptrたとえば、スコープが Objective C クラスの存続期間中続くを宣言できるようにしたいと考えています。

4

3 に答える 3

3

わかりました。Mac で C++ と Objective-C を使用していると仮定しましょう。私が正しければ、X コードを使用している可能性があります。したがって、プロジェクトのプロパティ (情報) に移動すると、. コンパイル オプション (GCC) を確認できます。そこには、C++ コンストラクター/デストラクタを有効にするオプションがあります (Cocoa プロジェクトではデフォルトでオフになっています)。

その後、デフォルトのような C++ スコープが得られますが、私はあまり使用しておらず、テンプレート コード (Boost) に問題がありました。

また、GCCに取り組んでいる善良な人々以外に、これを公式にサポートしている人はいないと思います。したがって、このようなものはすべて単体テストを行い、問題が発生する可能性があることに注意することをお勧めします。

それでも、Objective-C で C++ を使用できることは、C++ の人としての私にとっては安心であり、リスクはメリットに値します :)

于 2008-11-12T11:07:46.270 に答える
1

開発者として私たちが残したわずかな正気を保持するという希望が少しでもある場合は、そうしません。deleteC++ オブジェクトに最適です。一般に、Objective-C と C++ を行ごとに混在させることは安全ですが、ランタイムがライフタイムを混在させるような手の込んだことをサポートするとは思わないでください。一般に、obj-c クラスの dealloc が呼び出されたときにオブジェクトを安全に破棄できますが、それ以外は、クラス スコープを混在させて泣かないことを期待しないでください。

于 2008-11-12T18:01:15.297 に答える
0

Xcode で、「Objective-C プログラミング言語」の「Using C++ With Objective-C」というセクションを読んでいます。試したことはありませんが、C++ クラスをインスタンス変数として使用できると書かれています。ゼロ引数コンストラクターを使用して、C++ クラスであるインスタンス変数を初期化します。dealloc では、デストラクタは逆のインスタンス変数宣言順序で呼び出されます。

OCPtrとBoost::shared_ptr with Cocoaに関するコメントに出くわしました。どちらもスマート参照カウント ポインター (代入演算子などのすべての参照カウントを管理するポインター) を使用します。

于 2011-01-21T11:42:35.507 に答える