私は練習目的のためにグラフィカルエンジンを開発し始めています。発生した最初の質問の1つは、ハンドルまたはスマートポインタを使用してクラスインスタンスを参照することです。ハンドル対スマートポインタ。何を使用するのですか?
私の視点から:
スマートポインタ長所:需要の下で作成された、彼らは古いポインタになることの問題はありません。欠点:リンクされたリストにあるので、ポインタの検索はO(n)操作です。
Handles pros:検索はO(1)、オブジェクトの再配置はO(1)です。 cons:古いポインタになり、新しいハンドルを作成すると、システムはハンドルテーブルの最初のNULLエントリをチェックします。
どちらを選択しますか?あなたの選択を説明してください。
編集:
を私はあなたのコメントと回答した後、いくつかのポイントを明確にしたいです。
スマートポインタが「STLリンクリストで表されている」という方法でリンクされたリストであるとは限りません。つまり、リンクされたリストとして動作するということです(あるオブジェクトをあるメモリブロックから別のオブジェクトに移動する場合、このオブジェクトへのすべての参照を正しく更新するためにスマートポインタの完全なリストを反復する必要があります。リンクリスト - )。
そして、私は正確に不透明なポインタまたは実装モデルへのポインタとして扱うわけではありません。私はグローバルハンドルテーブル(ポインタの配列)を持っているので、オブジェクトを要求すると、オブジェクトへの実際のポインタを見つけることができるこのテーブルのインデックスを含む逆参照可能なインスタンスが得られます。したがって、オブジェクトをあるブロックから別のブロックに移動すると、ハンドルテーブルのポインタエントリを更新するだけで、すべてのポインタが同時に自動的に更新されます。
「ハンドル」という用語を使用したときに覚えていることを正確に説明できますか? –
また、「ポインタを検索している」ということはどういう意味ですか、スマートポインタがリンクリストに格納されているのはなぜですか? – interjay
@davidcm:通常、 'handle'は、デバイスやファイルを開くための最初の最初の呼び出し後に、識別子として使用される不透明なエンティティ(多分ポインタ)を意味します。ここに。 –