智能指针的作用是管理指针所指向的内存的生命周期,能够管理(控制)该内存的共享和释放,避免用户在使用完该内存后忘记释放,造成内存泄漏。
智能指针是普通(生的,即未封装的)指针的封装,在提供普通指针的功能同时,管理指针所指向的内存空间,当智能指针的实例超出其作用域是,会自动调用析构函数,释放其管理的指针所指向的资源。
T* get();//⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针 T& operator*();//解引用,作用和普通指针一样 T* operator->();//解成员引用,作用和普通指针一样 T* release();//释放当前管理的内存 void reset (T* ptr = nullptr);释放当前管理的内存,并接手对ptr所指向的内存的管理。
unique_ptr指针是一种独占所有权模式的智能指针,unique_ptr独占它所管理的内存,保证同一时间内只有一个智能指针可以指向该内存。
shared_ptr是一种资源所有权模式的智能指针,它采用引用计数的机制,获知当前内存拥有者个数,当计数归零时资源会释放。拷贝赋值会导致计数增加,析构会导致计数减少。
weak_ptr是一种不控制内存生命周期的智能指针,它指向一个shared_ptr所管理的内存。它只提供对管理对象的访问手段,其构造和析构不会引起引用计数的改变。
其作用是用来解决shared_ptr循环引用是所引起的死锁问题(循环引用指的是使用多个智能指针 shared_ptr 时,出现了指针之间的相互指向,从而形成环的情况,类似于死锁现象,在这种情况下智能指针往往不能正常调用对象的析构函数,从而造成内存泄漏)。
和unique类似,已过时,别用(没有禁用拷贝,存在潜在的内存崩溃问题)。