Возможно ли, что make_shared не имеет каких-либо исключений, но возвращает nullptr? - PullRequest
3 голосов
/ 08 апреля 2020

Я недавно столкнулся с проблемой с shared_ptr. Мне любопытно, если make_shared потерпел неудачу, это вызовет исключения, верно? Есть ли какая-либо ситуация, когда make_shared вернул nullptr, но без каких-либо исключений?

1 Ответ

5 голосов
/ 08 апреля 2020

Из документов :

std::make_shared ...

Может выдать std :: bad_allo c или любое исключение, выданное конструктором из T.

Итак, если вы выбросите исключение из конструктора вашего класса, то std::make_shared также выбросит его. Помимо исключений, генерируемых конструктором, std::make_shared может выдавать std::bad_alloc исключение самостоятельно.

Следовательно, вам не нужно проверять, равен ли результат std::make_shared nullptr. Просто обязательно поймайте исключение и правильно обработайте его.

...