智能指针
当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。智能指针都位于头文件memory中,智能指针是非线程安全的。
boost内存管理
Boost库提供了6种智能指针,位于boost命名空间。分别为shared_ptr、weak_ptr、scoped_ptr、scoped_array、shared_array、intrusive_ptr。1
2#include <boost/smart_ptr.hpp>
using namespace std;
重载new与delete
- new和delete的机制
new分3步,首先new表达式用一个名为operarot new或者operator new[]的标准库函数来分配一块足够大的原始内存;然后编译器运行相应的构造函数来构造;最后构造完成之后返回一个指向该对象的指针。delete分2步,首先对指针指向的内存执行析构操作,然后调用operator delete或者operator delete[]释放相应空间。
allocator类
- new和delete的局限性
new在使用时将分配内存与初始化结合在了一起,而delete将析构与释放内存结合在了一起。对于单个对象的分配与析构,这毫无问题。但对于大量的元素,也许我们并不知道需要多少个对象,仅仅只是先分配一块内存,真正需要时再进行构造。