指针指针的由来
在C/C++里面,内存管理由开发者自己管理。指针变量总是指向一片内存空间,这片内存空间可以是局部变量、也可以是通过malloc、new申请的。如果申请的内存没有释放,就会导致内存泄漏。最终因为内存耗尽,服务被操作系统OM掉。
为了解决内存泄漏的问题,Java提出了虚拟机来管理内存,降低程序开发难度。C++则提出了智能指针,auto_ptr、shared_ptr、weak_ptr, unique_ptr,通过智能指针管理分配的内存单元,利用C++类对象的生命周期管理智能指针的生命周期结束后,会调用析构函数释放分配的内存。下面介绍这几个智能指针的使用方法。
auto_ptr 独占式指针
在构造的时候获取资源,在析构的时候释放资源,对指向符->、解引用进行重载,使用起来就像普通的指针。auto_ptr 会存在对象所有权转移的问题,在使用中需要谨慎注意。例如,下面这个case。
std::auto_ptr< string> ps(new string(“I reigned lonely as a cloud.”));
auto_ptr vocation;
vocation = ps; // 所有权发生转移
cout << *ps << endl; // 程序崩溃
cout << *vocation << endl;
这段代码运行后,程序会直接crash。原因在于第三行已经把ps的所有权转移到 vocation,ps的值为0,对一个空指针取值就会出现cras