13
FEB
C++中的智能指针
C++中堆上的动态资源管理是一个容易出错的地方,借助RAII(Resource Acquisition Is Initialization,资源获取即初始化),能够简化资源管理,依此思想产生的智能指针极大的简化了编程。 本文先简要介绍C++中资源管理,然后介绍RAII,最后在这些概念上实现一个简单的不带引用计数的智能指针和带引用计数的智能指针,以加深对这些知识的理解。 C++中的栈、堆及资源管理 与C#中的概念相似,在C#中,值类型的对象大多数情况下是在栈上分配的,而引用类型的对象,则默认在堆上分配,这些都是默认行为,不需要手动指定,栈上的内存在出作用域后会被回收,而堆上的内存,则由垃圾回收器负责回收。 在C++中则复杂的多,它有三块内存区域: 静态内存,用来保存局部static对象、类的static数据成员,以及任何定义在函数之外的变量,分配在静态内存中的对象由编译器自动创建和销毁。 …