总第33篇
本文主要介绍C++11/14在标准库中对智能指针和引用计数的扩充,以供大家学习和工作的过程中参考。
1.引用计数
引用计数是为了防止内存泄漏而产生的,其基本理念是:对于动态分配的对象进行引用计数,当增加一次对同一个对象的引用时,计数加1,当删除一次引用时,计数减1,当一个对象的引用计数减为0时,就自动删除指向的堆内存。
在传统C++中,总是手动的释放资源,用new
和delete
去实现。而在C++11中,引入智能指针和引用计数,让程序开发者不再关心手动释放内存。 这些智能指针包括:std::shared_ptr
、std::unique_ptr
、std::weak_ptr
,使用它们需要包含头文件<memory>
。
注意,引用计数并不是垃圾回收,引用技术能尽快回收不再被使用的对象,同时在回收的过程中也不会造成长时间的等待,更能够清晰明确地表明资源的生命周期。
2.std::shared_ptr
std::shared_ptr
是一种智能指针,可以记录有多少个shared_ptr
共同指向一个对象,从而消除显式的调用delete
,当引用计数变为0时,就会将对象自动删除。
但是,使用std::shared_ptr
依然需要使用new
来