一、智能指针
c++程序设计中经常会用堆内存,程序员要自己管理内存的申请和释放。使用原
始指针,容易造成堆内存泄漏(忘记释放),二次释放;使用智能指针能更好
的管理堆内存。
c++中四个智能指针:auto_ptr,unique_ptr,shared_ptr,weak_ptr,
auto_ptr 已被 c++11 弃用
头文件 #include <memory>
使用时,调用智能指针自身带的函数用 . ; 调用所指向对象的成员用->
1. shared_ptr(共享的智能指针)
1)定义:允许多个指针指向同一个对象,内部维护一个计数器,无论何时拷贝
一个 shared_ptr,计数器都会递增,当指向该对象的最后一个 shared_ptr 被
销毁时,shared_ptr 类会自动销毁该对象。
shared_ptr 类,类似 vector ,智能指针也是模板,当我们创建一个智能指针
时,必须提供额外的信息:指针可以指向的类型。与 vector 一样,在尖括号内
给出类型,之后是所定义的这种智能指针的名字。
use_count() 有多少个指针指向当前对象,即引用计数
2)基本用法:
• 初始化 优先使用 make_shared
// 1 通过构造函数、std::shared_ptr 辅助函数、reset 方法来初始化
std::shared_ptr<int> p1(new int(1));
std::shared_ptr p2 = p1;
std::shared_ptr<int> p3;
p3.reset(new int(1)); // 与赋值类似,reset 会更新引用计数,p3 指向一个
新对象,p3 原来指向的对象计数-1
if (p3) {
cout << "p3 not null" << endl;
}
// 2 应该优先使用 make_shared 来构造智能指针,更高效
auto p1 = make_shared<int>(100);
// 相当于
shared_ptr<int> sp1(new int(100));
// 不能将原始指针赋值给智能指针
std::shared_ptr<int> p = new int(1); // error
评论0
最新资源