# std::unique_ptr<T,Deleter>::operator<<

< cpp‎ | memory‎ | unique ptr

template <class CharT, class Traits, class Y, class D> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const std::unique_ptr<Y, D>& p); |  | (C++20 起)

插入 `p` 所管理的指针的值到输出流 `os` 中。

等价于 `os << p.get()` 。

此重载仅若 os << p.get() 为合法表达式才参与重载决议。

### 参数

os | - | 要插入 `p` 到的 std::basic_ostream
p | - | 要插入到 `os` 的指针

### 返回值

`os`

### 注意

若 std::unique_ptr<Y, D>::pointer 为指向字符类型的指针（例如当 `Y` 为 char 或 char[] 或 CharT 时），这可能最终调用 `operator<<` 对空终止字符串的重载（若该指针实际上不指向这种字符串，则导致未定义行为），而非打印指针值自身的重载。

### 示例

    #include <iostream>
    #include <memory>

    class Foo {};

    int main()
    {
        auto p = std::make_unique<Foo>();
        std::cout << p << '\n';
        std::cout << p.get() << '\n';
    }

可能的输出：

    0x6d9028
    0x6d9028

### 参阅

get | 返回指向被管理对象的指针 (公开成员函数)