Я работаю над C++ API, который экспортирует несколько классов из DLL.Использование shared_ptr в качестве выходного параметра
интерфейс общественного класса А должен соблюдать следующие условные обозначения:
- Все функции возвращают код ошибки.
- Выходные параметры используются для дополнительных возвращаемых значений.
- Проход по указателю используется для выходных параметров.
- Ссылка на константу используется для входных параметров (передается по значению для примитивных типов).
- Когда клиент должен взять на себя ответственность за выходной параметр
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