我是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要求调用者为任何“NULL”参数创建临时空的shared_ptrs。这充其量是笨重而且模糊不清。
method1是最好的方法吗?有没有更好的办法?我在这里完全错过了船吗?