初始化全局静态shared_ptr对象并传递给函数:
#include <iostream>
#include <memory>
std::shared_ptr<int> globalObj = std::make_shared<int>(5);
int testFunc(std::shared_ptr<int> obj1) {
std::shared_ptr<int> localObj = obj1;
std::cout<<"localObj.count:" << localObj.use_count() << std::endl;
std::cout << "localObj:" << *localObj <<std::endl;
localObj.reset(); -->** is it necessary to reset local count??**
std::cout<<"localObj.count:" << localObj.use_count() << std::endl;
return 0;
}
int main()
{
std::cout<<"globalObj.count:" << globalObj.use_count() << std::endl;
std::cout <<"globalObj:" << *globalObj <<std::endl;
testFunc(globalObj);
std::cout<<"globalObj.count:" << globalObj.use_count() << std::endl;
std::cout <<"globalObj:" << *globalObj <<std::endl;
globalObj.reset(); --> **is it necessary to reset global count??**
std::cout<<"globalObj.count:" << globalObj.use_count() << std::endl;
return 0;
}
globalObj.count:1
globalObj:5
localObj.count:3
localObj:5
localObj.count:3
globalObj.count:1
globalObj:5
globalObj.count:1
reset()是否会影响C++程序的效率?
1条答案
按热度按时间wr98u20j1#
没有必要重置,没有。
智能指针的目标:
unique_ptr
、shared_ptr
和weak_ptr
是通过RAII概念自动释放内存。因此,释放智能指针在99.9%的情况下是毫无意义的。
下面是一个代码示例,但很少说明:
输出:
被人欺负了!
globalObj.count:1
globalObj:5
localObj.count:2
localObj:5
globalObj.count:1
globalObj:5
毁了!
你可以在这里测试:https://onlinegdb.com/tXqnoysmT