Я новичок в shared_ptrs и пытаюсь найти правильный способ обработки «необязательных» аргументов указателя.То есть, как лучше всего передать аргументы указателя методу, любой из которых может быть NULL при любом вызове.Вот упрощенный пример с использованием необработанных указателей:
class Obj {
SomeType *ptrA;
SomeType *ptrB;
...
void method(SomeType* a, SomeType* b) {
ptrA = a;
ptrB = b;
}
}
Теперь переключитесь на shared_ptrs:
class Obj {
shared_ptr<SomeType> ptrA;
shared_ptr<SomeType> ptrB;
// Option 1: pointers to shared pointers:
void method1(shared_ptr<SomeType>* a, shared_ptr<SomeType>* b) {
if (a) ptrA = *a;
else ptrA.reset();
// repeat for b
}
// Option 2: pass empty shared_ptrs as analog for NULL
void method2(shared_ptr<SomeType> a, shared_ptr<SomeType> b) {
ptrA = a;
ptrB = b;
}
}
method1 берет указатели на shared_ptrs, чтобы вызывающие абоненты могли передавать NULL, и вы можете легко объявить аргументы со значением по умолчаниюзначение NULL.Однако логика становится немного запутанной, и использование указателей на shared_ptrs просто кажется неправильным.
method2 требует, чтобы вызывающая сторона создала временные пустые shared_ptrs для любых аргументов «NULL».В лучшем случае это громоздко и неясно.
Является ли method1 лучшим способом?Есть ли способ лучше?Я полностью пропустил лодку здесь?