如果我使用make_shared
或make_unique
创建指针,是否需要检查它是否为nullptr
,例如:
std::unique_ptr<class> p = std::make_unique<class>();
if (p == nullptr)
{
....
....
}
如果您的内存确实用完了,std::make_unique
会超出预期。因此,您将永远不会从std::make_unique
中获得空指针。
这是正确的吗?
因此,当您执行nullptr
和make_shared
时是否不需要检查make_unique
?
答案 0 :(得分:5)
来自std::make_unique
的cppreference(与std::make_shared
类似):
例外
可能抛出
std::bad_alloc
或T的构造函数抛出的任何异常。如果引发异常,则此函数无效。
“此功能无效”特别意味着它不会返回任何内容,因为启动了异常处理机制。因此,是的,您的假设是正确的。 std::make_unique
中的错误处理是由异常完成的,并且返回值永远不会为nullptr
。