通常、Symbian OS C++ を標準 C++ に移植しようとするのは、Symbian のイディオムが何をするかを十分に理解していないため、悪い考えです。
これは、ほとんどのコードをゼロから書き直すことが正しいプロジェクトの 1 つになる可能性が非常に高いです。ターゲットにしている言語をほとんど知らない場合、間違いを犯したり、時間を無駄にしたり、新しいコードを捨てたりすることはないと思い込んでも、ほとんど意味がありません。それはすべて学習の一部です。
CleanupStack メカニズムは、停電やメモリ不足の状態など、問題が発生する可能性のあるあらゆる事態に対処するのに役立ちます。技術的には、最近では C++ の例外として実装されていますが、標準の C++ コードが通常処理する通常のエラー ケース以上のものをカバーしています。
記述子 (TDesc、TBuf、および HBuf はすべて記述子クラス階層に属します) とテンプレート (配列、キュー、リストなど) は、CleanupStack、コーディング標準、メモリ管理、整合性などの問題に対処しながら、標準 C++ で同等のものよりも前から存在します。 .
それについて知りたい場合は、関連するプラグイン: Quick Recipes On Symbian OSは、できるだけ少ないページですべてを説明しようとする最近の試みです。
開始するには、 Foundationの Web サイトも必ず確認してください。
T で始まるクラスは、スタックに割り当てることができるほど小さいことを意味します。
C のサフィックスが付いた記述子クラスは、不変であることを意図しています (ただし、通常、それらから可変記述子を作成できます)。
HBufC は、H で始まるほとんど唯一の Symbian クラスです。常にヒープに割り当てる必要があります。
C というサフィックスが付いたメソッドは、正常に戻ると、CleanupStack にオブジェクトを追加します (通常は、それが返すオブジェクトです)。そのオブジェクトをポップするのは呼び出しコード次第です。
R で始まるクラスは、スタックに割り当てられることを意図していますが、独自のヒープベースのリソースを管理します。通常、デストラクタの前に呼び出す必要があるある種の Close() メソッドがあります。
オブジェクトのコレクションとオブジェクトへのポインターのコレクションの違いを理解する典型的な方法は、コレクション内のオブジェクトの所有者です。コレクションが追加されたときにオブジェクトを所有し、削除されたときにそれらを失います (したがって、それ自体が破棄されたときにまだ含まれている各オブジェクトを削除する責任があります) か、コレクションは所有権を譲渡せず、他の何かがオブジェクトを保証する必要があります含まれているものは、コレクションの存続期間中有効なままです。
コレクションについて考えるもう 1 つの方法は、コレクションにオブジェクトを追加/コレクションからオブジェクトを取得するときに、どの程度のオブジェクトのコピーが必要かということです。
Symbian のディスクリプタ クラスとコレクション クラスは、メモリを使用するこれらのさまざまな方法をすべてカバーし、目的に応じて必要なものを選択できるようにすることを目的としています。
それを正しく行うのは確かに簡単ではありませんが、それがこのオペレーティング システムのしくみです。