【发布时间】:2017-11-16 19:38:30
【问题描述】:
这样做合理吗?
void MyFunc(std::shared_ptr<MyClass>* p) {
// calculate a, b, c
p->reset(new MyClass(a, b, c));
}
int main() {
std::shared_ptr<MyClass> ptr;
MyFunc(&ptr);
// do some other work with ptr
return 0;
}
我读到不建议使用原始指针,只建议使用智能指针,但在我的函数参数中,基本上我使用的是原始指针。这是一个不好的做法
【问题讨论】:
-
你可以通过引用而不是指针来传递智能指针。
-
这里还需要指针类型吗?你可以通过引用传递
MyClass吗? -
好吧,我试图坚持一种风格,如果函数参数发生变化,则使用指针
-
@hovo 这就是参考的用途。指针有意义的唯一情况是参数值是否可以为空。如果没有意义,则应通过引用。如果未修改,则为 const 引用。
-
@hovo 这真的是一个品味问题。 Google C++ Style Guide 中有一些我真的不同意的东西,这就是其中之一。就个人而言,我更喜欢在签名中看到引用,这样我就自动知道我不能传递空对象(nullptr)。如果我看到一个指针,虽然不是可选的,但我可以将它传递一个空值,而不会有破坏一切的风险。他们对此的欺骗推理对我来说是虚假的。
标签: c++ c++11 pointers shared-ptr smart-pointers