[C++11]独占的智能指针unique_ptr的初始化和使用
Posted Wecccccccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]独占的智能指针unique_ptr的初始化和使用相关的知识,希望对你有一定的参考价值。
- 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;
}
测试结果:
以上是关于[C++11]独占的智能指针unique_ptr的初始化和使用的主要内容,如果未能解决你的问题,请参考以下文章