是否有推荐的方法来测试智能指针是否为空?
Is there a recommended way to test if a smart pointer is null?
我正在尝试检查 std::shared_ptr
是否为空。做
有区别吗
std::shared_ptr<int> p;
if (!p) { // method 1 }
if (p == nullptr) { // method 2 }
Is there a difference between doing
std::shared_ptr<int> p;
if (!p) { // method 1 }
if (p == nullptr) { // method 2 }
不,没有区别。这两个操作中的任何一个都有 properly defined overload.
另一个等价物是
if(p.get() == nullptr)
shared_ptr
为bool转换提供了一个特定的操作符std::shared_ptr::operator bool
.
测试是否未设置:
if (!p)
测试是否设置:
if (p)
您可以通过以下方式非常明确地表达您的意图:
if (static_cast<bool>(p))
我正在尝试检查 std::shared_ptr
是否为空。做
std::shared_ptr<int> p;
if (!p) { // method 1 }
if (p == nullptr) { // method 2 }
Is there a difference between doing
std::shared_ptr<int> p; if (!p) { // method 1 } if (p == nullptr) { // method 2 }
不,没有区别。这两个操作中的任何一个都有 properly defined overload.
另一个等价物是
if(p.get() == nullptr)
shared_ptr
为bool转换提供了一个特定的操作符std::shared_ptr::operator bool
.
测试是否未设置:
if (!p)
测试是否设置:
if (p)
您可以通过以下方式非常明确地表达您的意图:
if (static_cast<bool>(p))