我想知道两者之间有什么区别
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/