私はDLLから複数のクラスをエクスポートするC++ APIを開発中です。出力パラメータとしてshared_ptrを使用する
パブリッククラスインターフェイスは、次の規則に従う必要があります。
- すべての関数はエラーコードを返します。
- 出力パラメータは、追加の戻り値として使用されます。
- 出力パラメータには、ポインタによるパスが使用されます。
- constによる参照は、入力パラメータ(プリミティブ型の値渡し)に使用されます。
- 出力パラメータの所有権をクライアントが取得する必要がある場合は、
shared_ptr
が使用されます。そうでない場合は、通常のポインタが使用されます。
例インタフェース:
typedef std::shared_ptr<Object> ObjectPtr;
class APIClass
{
ErrorCode SetSomething(int i);
ErrorCode IsSomethingSet(bool* ask);
ErrorCode DoSomething();
ErrorCode GetSomething(ObjectPtr* outObj);
}
使用例:
ErrorCode res;
ObjectPtr obj;
res = myApiClass->GetSomething(&obj);
GetSomething実装:
ErrorCode APIClass::GetSomething(ObjectPtr* outObj)
{
ObjectPtr temp(new Object(), CleanUpFunction<Object>);
// Do something with object temp.
...
*outObj= temp;
return OK;
}
それがこの方法でのshared_ptrを使用するために保存するかが可能ですです私が知っておくべき問題?
エラーコードを返す代わりに、[例外](http://www.parashift.com/c++-faq-lite/exceptions.html)を使用したことがありますか? –
はい、DLLの境界を越えて例外を使用するため、例外を使用したくありません。 – Hoschie0815
あまりにも冗長であるため、質問を編集しました。 – Hoschie0815