测试智能指针之间是否有任何区别,例如shared_ptr,使用operator bool
if (!smart_ptr)
{
// ...
}
并使用operator ==
?
if (smart_ptr == nullptr)
{
// ...
}
我知道差别很小(如果有的话),但它也可以帮助同时决定编码风格。
答案 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
因此,它在体面的现代编译器中没有区别。