C/C++教程

C++ 智能指针

本文主要是介绍C++ 智能指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.智能指针的作用和定义

智能指针的作用是管理指针所指向的内存的生命周期,能够管理(控制)该内存的共享和释放,避免用户在使用完该内存后忘记释放,造成内存泄漏。

智能指针是普通(生的,即未封装的)指针的封装,在提供普通指针的功能同时,管理指针所指向的内存空间,当智能指针的实例超出其作用域是,会自动调用析构函数,释放其管理的指针所指向的资源。

2.智能指针的常用接口

T* get();//⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针
T& operator*();//解引用,作用和普通指针一样
T* operator->();//解成员引用,作用和普通指针一样
T* release();//释放当前管理的内存
void reset (T* ptr = nullptr);释放当前管理的内存,并接手对ptr所指向的内存的管理。

3.智能指针的类型

1.unique_ptr

unique_ptr指针是一种独占所有权模式的智能指针,unique_ptr独占它所管理的内存,保证同一时间内只有一个智能指针可以指向该内存。

2.shared_ptr

shared_ptr是一种资源所有权模式的智能指针,它采用引用计数的机制,获知当前内存拥有者个数,当计数归零时资源会释放。拷贝赋值会导致计数增加,析构会导致计数减少。

3.weak_ptr

weak_ptr是一种不控制内存生命周期的智能指针,它指向一个shared_ptr所管理的内存。它只提供对管理对象的访问手段,其构造和析构不会引起引用计数的改变。

其作用是用来解决shared_ptr循环引用是所引起的死锁问题(循环引用指的是使用多个智能指针 shared_ptr 时,出现了指针之间的相互指向,从而形成环的情况,类似于死锁现象,在这种情况下智能指针往往不能正常调用对象的析构函数,从而造成内存泄漏)。

4.auto_ptr

和unique类似,已过时,别用(没有禁用拷贝,存在潜在的内存崩溃问题)。

 

这篇关于C++ 智能指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!