1.智能指针介绍
在C++中,动态内存的管理是通过成对运算符new和delete来完成的。new在动态内存中为对象分配空间并返回一个指向该对象的指针,可以选择对对象进行初始化;delete接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。因为动态内存的申请和释放都是由程序员自己管理的,容易导致堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题。
因此,引入了智能指针的概念,通过智能指针来管理,析构的时候会自动释放其内存。
C++11标准库提供了三种智能指针(smart pointer)类型来管理动态对象,包含在头文件<memory>中,shared_ptr、weak_ptr和unique_ptr(auto_ptr或已废弃)。
- shared_ptr控制对象的生命期。允许多个指针指向同一个对象,每使用它一次,引用计数+1,即强引用;
- weak_ptr不控制对象的生命期。它也是一个引用计数型智能指针,但是它不增加对象的引用计数,即弱引用。但是它知道对象是否还活着。如果对象还活着,那么它可以提升为有效的shared_ptr;如果对象已经死了,提升会失败,返回一个空的shared_ptr。即 weak_ptr只是提供了对管理对象的一个访问手段;
- unique_ptr则"独占"所指向的对象。与所指对象的内存紧密地