智能指针
1.什么是智能指针?
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露(利用自动调用类的析构函数来释放内存)。
实现技术是使用引用计数(shared_ptr)、资源独占(unique_ptr和auto_ptr)、只引用,不计数(weak_ptr)。
指针和智能指针:
智能指针是对象,对象在过期时,会调用其析构函数析构掉,而常规指针,当其指向堆内存,最终需要人为的delete
2.为什么需要智能指针?
(1)new和delete管理动态内存存在的三个常见问题:
1)忘记delete内存
2)使用已经释放掉的对象
3)同一块内存释放两次
(2)中途抛出异常,无法释放资源。
3.智能指针的原理
创建一份资源出来的时候,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源。除此之外,通过运算符重载(重载*和重在-> 等),可以像指针一样使用。
4.3种智能指针的实现策略/实现技术
(1)auto_ptr和unique_ptr:
采用的是单独所有权的概念,对于特定对象,只能被一个智能指针所拥有,这样,只有拥有该对象的智能指针的析构函数才会删除该对象,但要注意的是,赋值操作会转让操作权。
(2)shared_ptr
shared_ptr则采用