Может ли умный указатель, переданный по ссылке, быть nullptr? - PullRequest
1 голос
/ 16 марта 2020

Есть много вопросов о передаче умных указателей по ссылке. Я не нашел однозначного ответа: можем ли мы передать nullptr методу, принимающему умный указатель по ссылке?

Пример:

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

void main() {
   myFunc(nullptr);
}

1 Ответ

7 голосов
/ 16 марта 2020

Можем ли мы передать nullptr методу, принимающему умный указатель по ссылке?

Не с неконстантной ссылкой на lvalue.

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

void main() {
   myFunc(nullptr);
}

Сбой компилировать, потому что myStrRef не может быть привязан к временному объекту. Если бы вместо этого у вас было

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

Тогда это было бы законно, поскольку эти ссылки могут связываться с временным объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...