c++ - 对指针 C++ 的参数引用

标签 c++ pointers reference

我想知道有什么区别

void foo(std::shared_ptr<A> a_){
   //work on a_
}  

void bar(std::shared_ptr<A>& a_){
   //work on a_
}

?

这里的引用有用吗?因为我正在处理 a_ 的副作用,所以我相信它不会。但是可以写这样的东西所以我真的很想知道。

谢谢!

最佳答案

它的工作方式与任何其他数据类型一样,智能指针在这个意义上没有什么不同:

  • 按值传递时,您可以使用原始对象的拷贝。
  • 通过引用传递时,可以修改原始对象。

看这个简单的例子

#include <iostream>
#include <memory>

struct A {
    int a_;
    A(int a) : a_(a) {}
};

void foo_val(std::shared_ptr<A> a_){
    a_ = std::make_shared<A>(10);
}
void foo_ref(std::shared_ptr<A>& a_){
    a_ = std::make_shared<A>(10);
}

int main() {
   std::shared_ptr<A> pA = std::make_shared<A>(20);

   foo_val(pA);
   std::cout << pA->a_ << std::endl;
   foo_ref(pA);
   std::cout << pA->a_ << std::endl;   

   return 0;
}

它输出 20, 10 表明 foo_val 不能改变原始对象,而 foo_ref 可以。

demo

关于c++ - 对指针 C++ 的参数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43112070/

相关文章:

c++ - 在 C++ 中将 RGB 格式转换为 HDR 图像格式(EXR 格式)

c++ - 二叉搜索树中节点/值的频率

c++ - 错误 C2535 : 'void NumberList::appendNode(double)' : member function already defined or declared Line 35

c++ - 理解字符引用

objective-c - 保留和复制之间的区别?

c++ - 从函数返回 shared_ptr 的取消引用值

android - 库突然不会在动态链接器(NDK)中加载

c - ptr、*ptr 和 &ptr 之间的区别

C# 从另一个类引用文本框

memory - 在 Lua 中通过引用删除变量