c ++ 11 - 指针检查的性能差异 - 智能指针

时间:2014-09-30 13:35:07

标签: c++ c++11 coding-style

测试智能指针之间是否有任何区别,例如shared_ptr,使用operator bool

if (!smart_ptr)
{
    // ...
}

并使用operator ==

if (smart_ptr == nullptr)
{
    // ...
}

我知道差别很小(如果有的话),但它也可以帮助同时决定编码风格。

1 个答案:

答案 0 :(得分:5)

在gccv4.8中:

#include <memory>

bool is_empty(const std::unique_ptr<int>& p) {
  return p == nullptr;
}

生成汇编代码:

is_empty(std::unique_ptr<int, std::default_delete<int> > const&):
    cmpq    $0, (%rdi)
    sete    %al
    ret

#include <memory>

bool is_empty2(const std::unique_ptr<int>& p) {
  return !p;
}

生成汇编代码:

is_empty2(std::unique_ptr<int, std::default_delete<int> > const&):
    cmpq    $0, (%rdi)
    sete    %al
    ret

因此,它在体面的现代编译器中没有区别。

Live Demo by Jonathan Wakely