一、
shared_ptr 对象作为值参数
void fun(std::shared_ptr<int> ptr)
{
std::cout << ptr << endl;
}
int main()
{
std::shared_ptr<int> ptr = make_shared<int>(55);
std::cout << ptr << std::endl;
fun(ptr);
std::cout << ptr << std::endl;
return 0;
}
结果中表明:当指针作为参数,未进行操作情况下,所指向的时同一块内存空间。
二、
void fun(std::shared_ptr<int> ptr)
{
ptr = std::shared_ptr<int>(new int(34));
//这个地方需要delete吗?
std::cout << ptr << endl;
}
int main()
{
std::shared_ptr<int> ptr = make_shared<int>(55);
std::cout << ptr << std::endl;
fun(ptr);
std::cout << ptr << std::endl;
return 0;
}
结果表明:指针在函数内部发生变化,当函数结束时,函数内部指针自动销毁,重新指向原来的内存空间中。
三、
智能指针作为引用传参
void fun(std::shared_ptr<int>& ptr)
{
ptr = std::shared_ptr<int>(new int(34));
//这个地方需要delete吗?
std::cout << ptr << endl;
}
int main()
{
std::shared_ptr<int> ptr = make_shared<int>(55);
std::cout << ptr << std::endl;
fun(ptr);
std::cout << ptr << std::endl;
return 0;
}
表明:当使用引用的时候,指针的指向会彻底发生改变。
总结:个中取别自行领悟