是否有推荐的方法来测试智能指针是否为空?

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))