答案 0 :(得分:1)
就像任何其他数据类型一样,智能指针在这个意义上没有区别:
见这个简单的例子
#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
则可以。