shared_ptr 原子函数采用指针而不是引用的基本原理
Rationale for the shared_ptr atomic functions taking pointer instead of reference
如您所见here,shared_ptr
作为指针而不是引用传递。另请注意
All these functions invoke undefined behavior if p is a null pointer.
那么为什么是指针呢?我认为在 C++ 中,引用应该是首选,除非有特定的原因使用指针。
template< class T >
bool atomic_is_lock_free( const std::shared_ptr<T>* p );
接受一个指向智能指针的指针,因为这是更通用的 atomic_is_lock_free
:
的特例
template< class Atomic >
bool atomic_is_lock_free(const Atomic* obj)
其中 Atomic
是 std::shared_ptr<T>
。所有模板函数 atomic_*
.
也是如此
正如用户 luk32 所注意到的,这只能部分回答问题:"While [...] such signature is demanded by template interface, it immediately begs to reapply the question and ask why the generic interface wasn't designed to use reference."
嗯,那些 <atomic>
signatures come originally from the GCC C extensions [citation needed] functions __sync_*
。由于 C
没有引用,C++ 委员会可能 [需要引用] 愿意模仿这些函数并提供一种简单的方法来更新依赖于这些内置函数的代码。
如您所见here,shared_ptr
作为指针而不是引用传递。另请注意
All these functions invoke undefined behavior if p is a null pointer.
那么为什么是指针呢?我认为在 C++ 中,引用应该是首选,除非有特定的原因使用指针。
template< class T >
bool atomic_is_lock_free( const std::shared_ptr<T>* p );
接受一个指向智能指针的指针,因为这是更通用的 atomic_is_lock_free
:
template< class Atomic >
bool atomic_is_lock_free(const Atomic* obj)
其中 Atomic
是 std::shared_ptr<T>
。所有模板函数 atomic_*
.
正如用户 luk32 所注意到的,这只能部分回答问题:"While [...] such signature is demanded by template interface, it immediately begs to reapply the question and ask why the generic interface wasn't designed to use reference."
嗯,那些 <atomic>
signatures come originally from the GCC C extensions [citation needed] functions __sync_*
。由于 C
没有引用,C++ 委员会可能 [需要引用] 愿意模仿这些函数并提供一种简单的方法来更新依赖于这些内置函数的代码。