リファクタリングしているコードには、次の形式の関数があります。
A f()
{
if(existing)
return A();
else
return A(handle);
}
Safe Bool Idiom は、後で A がハンドルに関連付けられているかどうかをテストするために使用されます。つまり、実行のために内部的に有効なハンドルを必要とするこのオブジェクトのクラス メソッドを呼び出す必要があるかどうかをテストします。A のメソッドは const です。
代わりに、ここでインターフェイス IA を返したいと思います。したがって、ポインターを返す必要がありますか? もしそうなら、ブースト共有ポインタを使用します。ポインターが何かを指しているかどうかをテストできます。
代わりにここで参照を操作する方法はありますか? そのようなアプローチをお勧めしますか、それともboost::shared_ptrsが進むべき道だと思いますか?
アップデート
A は IA から派生します。
私のコンパイラは gcc バージョン 4.4.3 です。
このコードの最大の問題は、外部の C API と対話するために A が使用されていることです。したがって、A のモックとその実装である A のベースとして IA インターフェイスを使用して、モックを作成したいと思います。次に、ファクトリとして表示される上記のメソッド f() の外では、IA ポインターのみを使用します。つまり、依存性注入です。
したがって、A は基本的にハンドルであり、ハンドルを必要とする一連の C API 関数へのインターフェイスです。インターフェイスは同じでハンドルが異なるタイプ A のオブジェクトをいくつか持つことができます。