c++ - 为什么 std::unique_ptr 有一个相等运算符?

标签 c++ c++11 smart-pointers unique-ptr comparison-operators

我最近一直在考虑它,我能看到的关于 std::unique_ptr 具有相等运算符的唯一参数是为了完整性,因此标准模板库中的所有智能指针都有它。但除非你做错了什么,否则我看不到任何可能返回 true 的例子。 .

显然可以执行以下操作:

int* a = new int(1);
std::unique_ptr<int> u_a1(a);
std::unique_ptr<int> u_a2(a);

if(u_a1 == u_a2)
{
    std::cout << "I'm double deleting soon" << std::endl;
}

但是,包含运算符是否只是允许人们在编译器不抛出错误的情况下犯此类错误?删除它不是更有意义,还是我错过了什么?

最佳答案

平等实际上可以返回true。最简单的情况是两个空指针:

std::unique_ptr u_a1;
std::unique_ptr u_a2;

if (u_a1 == u_a2) // ...

运算符还允许比较 unique_ptr<T, D>具有不同类型的对象,因此您可能有两种不同的删除器类型,它们将在清理时对同一指针执行不同的操作。或者甚至是默认删除器以外的一些删除器,它们故意可以多次执行相同的操作(计数器?)。

运算符的存在也可能使类型在某些模板中有效,这些模板碰巧想要比较其依赖类型的对象。

关于c++ - 为什么 std::unique_ptr 有一个相等运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61001306/

相关文章:

c++ - 错误 : LNK2001: unresolved external symbol "private: static class

c++ - 从 ListView 控件中删除项目

c++ - libclang 获取原始值

c++ - 如何在 C++ 中实现静态工厂模式

c++ - 如何使用 shared_ptr 避免悬挂指针?

C++ 安全对象删除

c++ - 如何在 g++ 中抑制 ' left shift count >= width of type' 警告

c++ - 在不提供定义的情况下覆盖函数有什么意义?

C++ boost 大数存储

c++ - 关于非聚合结构的初始化