有关shared_ptr的使用总结
2017-01-23 23:57
169 查看
测试过程代码
MyTaskPtr tmp1 = m_task;
MyTaskPtr tmp2 = m_task;
MyTaskPtr tmp3 = m_task;
printf("引用计数为:%d\n",m_task.use_count());
m_task.reset();
m_task.reset();
printf("引用计数为:%d\n", m_task.use_count());
printf("引用计数为:%d\n", tmp1.use_count());
tmp1.reset();
printf("引用计数为:%d\n", tmp2.use_count());
tmp2.reset();
printf("引用计数为:%d\n", tmp3.use_count());
tmp3.reset();
MyTask::~MyTask()
{
printf("hhhh");
}
结论:在使用智能指针的时候,因为不确定什么时候会释放内存,或者是觉得释放内存的时间太晚了,就一定要在哪里引用这个智能指针的时候,用完了立马reset一下,这样可以确保最后一个使用智能指针的时候,执行reset之后,计数即为0,然后就顺利的进行资源释放,如上代码,当tmp3.reset();的时候,计数刚好为0,然后会执行到~MyTask()中,即可释放该资源
MyTaskPtr tmp1 = m_task;
MyTaskPtr tmp2 = m_task;
MyTaskPtr tmp3 = m_task;
printf("引用计数为:%d\n",m_task.use_count());
m_task.reset();
m_task.reset();
printf("引用计数为:%d\n", m_task.use_count());
printf("引用计数为:%d\n", tmp1.use_count());
tmp1.reset();
printf("引用计数为:%d\n", tmp2.use_count());
tmp2.reset();
printf("引用计数为:%d\n", tmp3.use_count());
tmp3.reset();
MyTask::~MyTask()
{
printf("hhhh");
}
结论:在使用智能指针的时候,因为不确定什么时候会释放内存,或者是觉得释放内存的时间太晚了,就一定要在哪里引用这个智能指针的时候,用完了立马reset一下,这样可以确保最后一个使用智能指针的时候,执行reset之后,计数即为0,然后就顺利的进行资源释放,如上代码,当tmp3.reset();的时候,计数刚好为0,然后会执行到~MyTask()中,即可释放该资源
相关文章推荐
- stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
- shared_ptr(共享指针)使用总结
- stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
- 在smart_ptr中处理引用计数时使用swap概念(boost::shared_ptr.hpp)
- 有关TinyXML使用的简单总结(转)
- 有关TinyXML使用的简单总结
- 转贴-有关TinyXML使用的简单总结
- boost.shared_ptr源码整理和使用说明
- shared_ptr 两种常见的使用方式 (1)
- 【转】有关TinyXML使用的简单总结
- 有关国家自然科学基金申报的经验总结, 非常使用!
- boost/shared_ptr 用法总结
- 有关水晶报表的使用经验和资料总结
- shared_ptr中使用了 FILE* 添加删除器的用法
- C++:智能指针-TR1的shared_ptr和weak_ptr使用介绍
- 小测试:boost之shared_ptr在容器类std::list中的使用
- boost shared_ptr 使用注意点。
- 有关TinyXML使用的简单总结
- shared_ptr的使用心得
- boost::shared_ptr的多线程使用陷阱