智能指针

古人曰:好记性不如烂笔头。

引入概念

在C++的学习中,指针是一个帮助我们管理内存的工具。当我们为指针申请了一块内存之后,为了内存能够循环利用,我们也需要释放它。但是实在开发中,繁琐的程序往往会让我们遗忘,故引入智能指针。智能指针的工作就是,在它被销毁的时候且内存没有被其他指针指向,会自动释放没有其他指针引用的内存块。

常见的智能指针(C++11)

shared_ptr

  • 定义

顾名思义,就是多个shared_ptr可以指向同一块内存。

  • 使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //create
    shared_ptr<T> p;
    shared_ptr<T> p = make_shared<T>();
    shared_ptr<T> p = make_shared<T>(ags);
    shared_ptr<T> p = make_shared<T>(n,ags); //n个ags

    shared_ptr<T> p(new T(val));
    shared_ptr<T> p(q);
    shared_ptr<T> p(u); //u是unique_ptr,赋值给p后,因已不是唯一,u被置空。
    shared_ptr<T> p(q,d);
  • 其他操作
Name Description
p.get() 返回p中保存的指针
p.reset(q) 将p指向q
p.reset(q,d) d为lamda表达式([capture list](parameter list) -> return type{function type}),p会执行该表达式
swap(q,p)/ p.swap(q) 交换p和q的指针

unique_ptr

  • 定义

与shared_ptr不同,它表示这一块内存只归该指针所有。

  • 使用
    1
    2
    3
    unique_ptr<T> u;
    unique_ptr<T,D> u;
    unique_ptr<T,D> u(d);
  • 其他操作
Name Description
u.release() 将指针置空(空悬指针)
u.reset(q) 若q为内置指针,令u指向这个对象,否则,置为空

weak_ptr

  • 定义
    它可以看作是另一种shared_ptr, 但是当它指向一块shared_ptr
  • 创建
    1
    2
    weak_ptr<T> w;
    weak_ptr<T> w(sp);
  • 其他操作
Name Description
w.use_count() 与w共享的shared_prt的数量
w.expired() count为0,返回true,否则为false
w.lock() expired为true,返回空,否则返回w指向的shared_ptr
作者

Dylan Zhu

发布于

2021-02-28

更新于

2021-03-23

许可协议

# 相关文章
  1.虚函数
评论

:D 一言句子获取中...