は、ソースコードは、そのようなものです:なぜ "boost.thread"は "intrusive_ptr_add_ref"を手動で呼び出しますか? boost.threadのスタート機能で
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