智能指针
智能指针主要用于管理在堆上分配的内存,它的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针是一个类,当超出了类的实例对象的作用域时,会自动调用对象的析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。
C++11中的智能指针有三个:
1. unique_ptr
2. shared_ptr
3. weak_ptr
unique_ptr
unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。
unique_ptr<int> p3(new int(11));
unique_ptr<int> p4;
p4 = p3;//此时会报错!!
这样的赋值操作是不允许的,因为它是一个独占性的智能指针,但是也并不是不能赋值,使用标准库std中的move(),让你能够将一个unique_ptr赋给另一个。这个操作叫做转移所有权,赋值之后原指针会被清空。转移之后再次调用原指针可能还是会调用就崩溃的情况,所以使用move语法的目的是强调你的这个操作是在转移所有权,让你知道自己在干什么而不会随意调用指针。
int main()
{
unique_ptr<int> up1(new int(11));
cout << *up1 << endl;
unique_ptr<int> up3 = move(up1);
cout << *up3 << endl;
if (up1)
cout << *up1 << endl