这是传递可选/NULL shared_ptr参数的好习惯吗?
Is this a good idiom for passing optional/NULL shared_ptr parameters?
我是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。这是最麻烦和晦涩的。
方法1是最好的方法吗?有没有更好的办法?我是不是完全错过了机会?
传递一个空共享指针并没有错。事实上,空共享指针是一个实际的空对象,这意味着它是专门为这些用途而设计的。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 如何使用非类型参数传递模板化类的 Ref 或 Ptr
- 视觉 C++编译器在计算其参数之前是否允许将函数 ptr 存储在寄存器中?
- 如何调用传递的函数(函数 ptr 作为参数传递给函数)
- 为什么非常量ptr不能隐式地将ptr转换为常量作为模板中的参数
- 二进制泛型lambda不匹配ptr-to-function参数
- 分配const char *ptr数组参数?c++
- 函数PTR转换为带模板参数的函数
- ptr到成员模板参数的友元语法
- 将字符串引用作为参数传递时Ptr错误