在boost.thread的啓動功能,源代碼是類似的東西:爲什麼「boost.thread」手動調用「intrusive_ptr_add_ref」?
bool thread::start_thread_noexcept()
{
uintptr_t const new_thread = _beginthreadex(
0,
0,
&thread_start_function,
thread_info.get(),
CREATE_SUSPENDED,
&thread_info->id);
if (!new_thread)
{
return false;
}
// why call this line?
intrusive_ptr_add_ref(thread_info.get());
thread_info->thread_handle = (detail::win32::handle)(new_thread);
ResumeThread(thread_info->thread_handle);
return true;
}
的thread_info是一個侵入智能指針,它指向線程信息數據,調用intrusive_ptr_add_ref之前,計數已經是1,我不知道爲什麼在這裏手動調用intrusive_ptr_add_ref。我認爲Intrusive智能指針的工作應該是自動調用intrusive_ptr_add_ref和intrusive_ptr_release。
我試過一步一步通過源代碼,但沒有找到任何線索。
誰能告訴我 1.爲什麼要在這裏手動調用intrusive_ptr_add_ref? 2.在使用intrusive_ptr的情況下,我應該手動調用intrusive_ptr_add_ref?
謝謝,真誠。
非常感謝!你的回答非常有價值,並且揭示了一切! – zach