一、为什么要使用智能指针
普通指针申请的内存空间,如果没有在函数结束时及时回收内存,会造成内存泄漏。
智能指针是一个类的对象,在超出其作用域时,会自动调用析构函数,释放内存空间,避免内存泄漏。
1、unique_ptr(独占指针)
保证同一时间只有一个智能指针指向某对象。
unique_ptr<int> p1 = int(2);
unique_ptr<int> p2 = p1; //编译报错,此时 p2 会剥夺 p1 的所有权,p1 不再指向原内存
unique_ptr<string> p3 = string("hello!");
2、shared_ptr(共享指针)
可以多个指针指向同一个对象,引用计数,当拷贝指针时,计数器++;当销毁指针时,计数器--。
3、weak_ptr(弱指针)
参考链接:
https://www.nowcoder.com/tutorial/93/a34ed23d58b84da3a707c70371f59c21