使用make_shared和make_unique时是否需要检查nullptr?

时间:2019-07-18 08:00:50

标签: c++ c++11 c++14 c++17

如果我使用make_sharedmake_unique创建指针,是否需要检查它是否为nullptr,例如:

std::unique_ptr<class> p = std::make_unique<class>();
if (p == nullptr)
{
    ....
    ....
}

如果您的内存确实用完了,std::make_unique会超出预期。因此,您将永远不会从std::make_unique中获得空指针。 这是正确的吗?

因此,当您执行nullptrmake_shared时是否不需要检查make_unique

1 个答案:

答案 0 :(得分:5)

来自std::make_unique的cppreference(与std::make_shared类似):

  

例外

     

可能抛出std::bad_alloc或T的构造函数抛出的任何异常。如果引发异常,则此函数无效。

“此功能无效”特别意味着它不会返回任何内容,因为启动了异常处理机制。因此,是的,您的假设是正确的。 std::make_unique中的错误处理是由异常完成的,并且返回值永远不会为nullptr