有关shared_ptr的使用总结

测试过程代码


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()中,即可释放该资源




猜你喜欢

转载自blog.csdn.net/wei375653972/article/details/54698217