使用指针而不是引用的shared_ptr原子函数的基本原理

Lin*_*gxi 8 c++ reference shared-ptr language-lawyer c++11

正如您在此处看到的,shared_ptr作为指针而不是引用传递.另请注意

如果p是空指针,则所有这些函数都会调用未定义的行为.

指针为什么?我认为在C++中,除非有特定的理由使用指针,否则应该首选引用.

YSC*_*YSC 3

template< class T >
bool atomic_is_lock_free( const std::shared_ptr<T>* p );
Run Code Online (Sandbox Code Playgroud)

接受一个指向智能指针的指针,因为这是更通用的特殊情况atomic_is_lock_free

template< class Atomic >
bool atomic_is_lock_free(const Atomic* obj)
Run Code Online (Sandbox Code Playgroud)

哪里。Atomicstd::shared_ptr<T>所有模板函数也是如此atomic_*

正如用户 luk32 所注意到的,这仅部分回答了问题:“虽然模板接口需要这样的签名,但它立即请求重新应用该问题并询问为什么通用接口未设计为使用引用。”

嗯,这些<atomic>签名最初来自 GCC C 扩展 [需要引用] 函数__sync_*。由于C没有引用,C++ 委员会可能[需要引用]愿意模仿这些函数并提供一种简单的方法来更新依赖于这些内置函数的代码。