【发布时间】:2012-02-16 15:00:57
【问题描述】:
我正在开发一个从 DLL 导出多个类的 C++ API。
公共类接口应遵循以下约定:
- 所有函数都返回错误代码。
- 输出参数用于附加返回值。
- 指针传递用于输出参数。
- 按常量引用传递用于输入参数(基本类型按值传递)。
- 当客户端应该取得输出参数的所有权时使用
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 而不是返回错误代码?
-
是的,但我不想使用异常,因为跨 DLL 边界使用它们的限制
-
编辑了这个问题,因为它太冗长了。
标签: c++ api error-handling shared-ptr