初始化
std::unique_ptr是一个独占的智能指针,他不允许其他的智能指针共享其内部的指针,可以通过他的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr。
cpp
unique_ptr<int> func()
{
return unique_ptr<int>(new int(520));
}
int main()
{
//通过构造函数初始化对象
unique_ptr<int>ptr1(new int(10));
//move ptr1不在指向之前的地址
unique_ptr<int>ptr2 = move(ptr1);
unique_ptr<int>ptr3 = func();
return 0;
}
reset
使用reset方法可以让unique_ptr解除对原始内存的管理,也可以用来初始化一个独占的智能指针。
cpp
int main()
{
//通过构造函数初始化对象
unique_ptr<int>ptr1(new int(10));
//move ptr1不在指向之前的地址
unique_ptr<int>ptr2 = move(ptr1);
ptr1.reset(); //解除对原始内存的管理
ptr2.reset(new int(1)); //重新指定智能指针管理的原始内存
return 0;
}
原始地址
如果想要获取独占智能指针管理的原始地址,可以调用get()方法,函数原型如下:
cpp
int main()
{
//通过构造函数初始化对象
unique_ptr<int>ptr1(new int(10));
//move ptr1不在指向之前的地址
unique_ptr<int>ptr2 = move(ptr1);
cout << *ptr2.get() << endl;
ptr2.reset(new int(1)); //重新指定智能指针管理的原始内存
cout << *ptr2.get() << endl;
return 0;
}