智能指针作为C++很重要的东西,被广泛使用。当智能指针被作为函数参数使用时,应该怎样使用呢?是否可以使用引用?
#include <iostream>
#include <memory>
void fun1(std::shared_ptr<int> sp)
{
std::cout << "fun1:" << sp.use_count() << std::endl;
}
void fun2(std::shared_ptr<int>& sp)
{
std::cout << "fun2:" << sp.use_count() << std::endl;
}
void fun3(std::shared_ptr<int>* sp)
{
std::cout << "fun3:" << sp->use_count() << std::endl;
}
int main()
{
std::shared_ptr<int> sp = std::shared_ptr<int>(new int);
std::cout << "main:" << sp.use_count() << std::endl;
fun1(sp);
std::cout << "main:" << sp.use_count() << std::endl;
fun2(sp);
std::cout << "main:" << sp.use_count() << std::endl;
fun3(&sp);
std::cout << "main:" << sp.use_count() << std::endl;
}
运行结果:
main:1
fun1:2
main:1
fun2:1
main:1
fun3:1
main:1
通过上面代码运行,可以发现只有fun1的指针引用在函数调用后有变化。所以智能指针作为函数参数的正确用法,就是传值使用。用智能指针的引用、指针都是不对的,无法实现智能指针的引用计数效果。