我正在從C++ API中導出幾個類的DLL。使用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還是有可能的我應該知道的問題?
您是否考慮過使用[exceptions](http://www.parashift.com/c++-faq-lite/exceptions.html)而不是返回錯誤代碼? – 2012-02-16 15:28:21
是的,但我不想使用異常,因爲跨DLL邊界使用它們的限制 – Hoschie0815 2012-02-17 03:06:15
編輯該問題是因爲它太冗長。 – Hoschie0815 2012-02-17 03:08:11