3
請參閱this鏈接:在atomic_exchange_strong_explicit的實施shared_ptr的
template<typename _Tp>
bool
atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p,
shared_ptr<_Tp>* __v,
shared_ptr<_Tp> __w,
memory_order,
memory_order)
{
shared_ptr<_Tp> __x; // goes out of scope after __lock
_Sp_locker __lock{__p, __v};
owner_less<shared_ptr<_Tp>> __less;
if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
{
__x = std::move(*__p);
*__p = std::move(__w);
return true;
}
__x = std::move(*__v);
*__v = *__p;
return false;
}
對我來說,它看起來像*__p == *__v
和!__less(*__p, *__v) && !__less(*__v, *__p)
雙方陳述的事實指針*__p
和*__v
是相等的。他們爲什麼在那裏使用?
謝謝。
請參閱https://stackoverflow.com/questions/21834131/stdshared-ptrowner-before-and-stdowner-less-what-exactly-is-meant-by-own – ecatmur