我想知道有什么区别
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
可以。
关于c++ - 对指针 C++ 的参数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43112070/