- std::unique_ptr
是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个
unique_ptr 赋值给另一个 unique_ptr。 - std::unique_ptr 不允许复制,但是可以通过函数返回给其他的 std::unique_ptr,还可以通过 std::move
来转译给其他的 std::unique_ptr,这样原始指针的所有权就被转移了,这个原始指针还是被独占的。 - 使用 reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。
- ptr1.reset(); 解除对原始内存的管理
- ptr2.reset(new int(250)); 重新指定智能指针管理的原始内存
代码如下:
#include <iostream>
#include <memory>
#include <string>
using namespace std;class Test
{
public:Test(){cout << "construct" << endl;}Test(int x) :m_num(x){cout << "construct x = " << x << endl;}Test(string str){cout << "construct str = " << str << endl;}~Test(){cout << "destruct" << endl;}void setValue(int v){m_num = v;}void print(){cout << "m_num = " << m_num << endl;}private:int m_num;
};int main()
{//通过构造函数初始化unique_ptr<int>ptr1(new int(9));//unique_ptr<int>ptr2 = ptr1; error//通过移动构造函数初始化unique_ptr<int>ptr2 = move(ptr1);//通过reset初始化ptr2.reset(new int (8));//获取原始指针unique_ptr<Test> ptr3(new Test(1));Test*pt = ptr3.get();pt->setValue(2);pt->print();ptr3->setValue(4);ptr3->print();return 0;}
测试结果: