目前,auto_ptr在程序中使用的越来越多了,在这里就不对其使用进行详述了,针对自己最近使用的情况在容易出问题的地方做一下说明:
if (m_CurrentJob.Tasks.size() > 0)
{
std::auto_ptr<PrintJob> pJob(new PrintJob(m_CurrentJob));
BOOL bSucceeded = PostThreadMessage(dwThreadId, WM_NEWJOB, (WPARAM)pJob.get(), 0);
if(bSucceeded)
{
pJob.release();
m_InprintingThreads.push_back(dwThreadId);
}
}
在上面的代码中,使用了智能指针,需要注意的有两个地方:
(1)智能指针只在声明自己的局部区域有效
(2)在本例中,如果没有release掉智能指针,那么在接收消息的线程中是不能够使用智能指针的,使用就会报错
(3)release的作用就是释放指针的控制权