定义于头文件 <memory>
template< class T, class Deleter = std::default_delete<T>>
 class unique_ptr; (1) (C++11 起) 
template < class T,class Deleter>
class unique_ptr<T[], Deleter>; (2) (C++11 起)  
 
返回指向被管理对象的指针
std::unique_ptr<T,Deleter>::get 
pointer get() const noexcept;             (C++11 起)  
返回指向被管理对象的指针,如果无被管理对象,则为 nullptr 。
参数
(无)
返回值
指向被管理对象的指针,无被管理对象,则为 nullptr 。
调用示例
#include <iostream>
#include <string>
#include <memory>
int main()
{
    std::unique_ptr<std::string> s_p(new std::string("Hello, world!"));
    std::string *s = s_p.get();
    std::cout << *s << '\n';
} 
输出

返回用于析构被管理对象的删除器
std::unique_ptr<T,Deleter>::get_deleter 
Deleter& get_deleter() noexcept;              (C++11 起) 
const Deleter& get_deleter() const noexcept;  (C++11 起) 
 
返回会用于析构被管理对象的删除器对象。
参数
(无)
返回值
存储的删除器对象。
调用示例
#include <iostream>
#include <memory>
struct Foo
{
    Foo()
    {
        std::cout << "Foo...\n";
    }
    ~Foo()
    {
        std::cout << "~Foo...\n";
    }
};
struct D
{
    void bar()
    {
        std::cout << "Call deleter D::bar()...\n";
    }
    void operator()(Foo* p) const
    {
        std::cout << "Call delete for Foo object...\n";
        delete p;
    }
};
int main()
{
    std::unique_ptr<Foo, D> up(new Foo(), D());
    D& del = up.get_deleter();
    del.bar();
}
 
输出

检查是否有关联的被管理对象
std::unique_ptr<T,Deleter>::operator bool 
explicit operator bool() const noexcept;    (C++11 起)  
检查 *this 是否占有对象,即是否有 get() != nullptr 。
参数
(无)
返回值
若 *this 占有对象则为 true ,否则为 false 。
调用示例
#include <iostream>
#include <memory>
int main()
{
    std::unique_ptr<int> ptr(new int(42));
    if (ptr)
    {
        std::cout << "before reset, ptr is: " << *ptr << '\n';
    }
    ptr.reset();
    if (ptr)
    {
        std::cout << "after reset, ptr is: " << *ptr << '\n';
    }
} 
输出

解引用指向被管理对象的指针
std::unique_ptr<T,Deleter>::operator* 
typename std::add_lvalue_reference<T>::type operator*() const;  (1) (C++11 起) 
pointer operator->() const noexcept;     (2) (C++11 起) 
 
operator* 与 operator-> 提供到 *this 所占有的对象的访问。
若 get() == nullptr 则行为未定义。
参数
(无)
返回值
1) 返回 *this 所占有的对象,等价于 *get() 。
2) 返回指向 *this 所占有对象的指针,即 get() 。
异常
1) 可能抛出,例如若 pointer 定义抛出的 operator*
调用示例
 
#include <iostream>
#include <memory>
struct Foo
{
    void bar() const
    {
        std::cout << "Foo::bar\n";
    }
};
void f(const Foo& foo)
{
    foo.bar();
    std::cout << "f(const Foo&)\n";
}
int main()
{
    std::unique_ptr<Foo> ptr(new Foo);
    ptr->bar();
    f(*ptr);
} 
输出

提供到被管理数组的有索引访问
std::unique_ptr<T,Deleter>::operator[] 
T& operator[](size_t i) const;         (C++11 起)  
operator[] 提供对 unique_ptr 所管理的数组元素的访问。
参数 i 必须小于数组中的元素数;否则行为未定义。
参数
| i | - | 要返回的元素的索引 | 
返回值
返回在索引 i 的元素,即 get()[i] 。
调用示例
#include <iostream>
#include <memory>
int main()
{
    const int size = 10;
    std::unique_ptr<int[]> fact(new int[size]);
    for (int i = 0; i < size; ++i)
    {
        fact[i] = (i == 0) ? 1 : i * fact[i - 1];
    }
    for (int i = 0; i < size; ++i)
    {
        std::cout << i << ": " << fact[i] << '\n';
    }
} 
输出











