通过引用传递的智能指针可以是 nullptr 吗?

ben*_*ist 1 c++ c++11

关于通过引用传递智能指针有很多问题。我没有找到一个明确的答案:我们可以将 nullptr 传递给通过引用接受智能指针的方法吗?

例子:

void myFunc(std::shared_ptr<std::string> &myStrRef) {
   // do something
}

void main() {
   myFunc(nullptr);
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 7

我们可以将 nullptr 传递给通过引用接受智能指针的方法吗?

不使用非常量左值引用。

void myFunc(std::shared_ptr<std::string> &myStrRef) {
   // do something
}

void main() {
   myFunc(nullptr);
}
Run Code Online (Sandbox Code Playgroud)

将无法编译,因为myStrRef无法绑定到临时对象。如果你有

void myFunc(const std::shared_ptr<std::string> &myStrRef) {
   // do something
}
// or
void myFunc(std::shared_ptr<std::string> &&myStrRef) {
   // do something
}
Run Code Online (Sandbox Code Playgroud)

那么这将是合法的,因为这些引用可以绑定到一个临时对象。