# std::hash<std::unique_ptr>

< cpp‎ | memory‎ | unique ptr

template<class T, class Deleter> struct hash<unique_ptr<T, Deleter>>; |  | (C++11 起)

std::hash 对 std::unique_ptr<T, Deleter> 的模板特化允许用户获得 std::unique_ptr<T, Deleter> 类型对象的散列值。

若启用 std::hash<typename std::unique_ptr<T,D>::pointer> ，则启用特化 std::hash<std::unique_ptr<T,D>> （见 std::hash ），否则禁用它。

启用时，对于给定的 std::unique_ptr<T, D> p ，此特化确保 std::hash<std::unique_ptr<T, D>>()(p) == std::hash<typename std::unique_ptr<T, D>::pointer>()(p.get()) 。

此特化的成员函数不保证为 noexcept ，因为指针可能是缀饰指针且其散列函数可能抛出。

### 示例

    #include <iostream>
    #include <memory>
    #include <functional>

    struct Foo {
        Foo() { std::cout << "Foo...\n"; }
        ~Foo() { std::cout << "~Foo...\n\n"; }
    };

    int main()
    {
        Foo* foo = new Foo();
        std::unique_ptr<Foo> up(foo);

        std::cout << "hash(up):  " << std::hash<std::unique_ptr<Foo>>()(up) << '\n';
        std::cout << "hash(foo): " << std::hash<Foo*>()(foo) << '\n';
    }

输出：

    Foo...
    hash(up):  3686401041
    hash(foo): 3686401041
    ~Foo...

### 参阅

hash (C++11) | 散列函数对象 (类模板)