C++智能指针

2019年6月9日 0 条评论 275 次阅读 0 人点赞

shared_ptr

  • shared_ptr<T> sp: 空智能指针
  • p.get(): 返回p中保存的指针
  • p.swap(q): 交换p和q中的指针
  • make_shared<T>(args): 返回一个shared指针, 指向一个动态分配内存的T对象, 使用args初始化该对象
  • shared_ptr<T> p(q): p是shared_ptrq的拷贝, q中的指针必须能够转换为T*
  • p.unique(): 返回p.use_count()是否为1
  • p.use_count(): 返回与p共享对象的智能指针个数
  • shared_ptr<T> p(q): p管理内置指针q所指向的对象, q必须指向new分配的内存, 且能转换成T*类型
  • shared_ptr<T> p(u): p接管unique_ptr u, 并将u置空
  • shared_ptr<T> p(q, d): 接管内置指针q, q必须能转换为T*, 使用可调用对象d代替delete
  • shared_ptr<T> p(p2, d): p是shared_ptr拷贝, p将使用d代替delete
  • p.reset(): 将p置空, 如果此时只剩一个shared_ptr指向该对象, 释放它
  • p.reset(q, d): 如果提供了内置指针q, 则将p指向q, 如果提供了可调用的d, 则用d代替delete

当计数为0时, shared_ptr会自动销毁所管理的对象并自动释放相关联的内存

unique_ptr

只允许同时一个unique_ptr指向一个对象

shared_ptr类似, 多了一个u.release(), 该函数使u放弃对象控制权, 将u置空, 返回指针

weak_ptr

可以指向一个由shared_ptr控制的对象, 但不会改变shared_ptr的计数

  • w.lock(): 由于对象可能不存在, 我们在访问w指向的对象时, 必须调用lock(), 如果对象存在, 返回一个指向该对象的shared_ptr, 否则返回一个空的shared_ptr

litmxs

这个人太懒什么东西都没留下

文章评论(0)