上面这个例子就是会出现函数结束了 却忘记了释放内存 产生了内存泄漏
怎么避免这种问题呢 我们就利用函数在终止时 会对栈上的对象进行析构这个特点
产生了智能指针的概念
我们用智能指针来管理分配的资源 当我们函数退出时 智能指针执行自己的析构函数 释放它管理的资源
模板auto_ptr是C++98提供的解决方案,C+11已将将其摒弃,并提供了另外两种解决方案。然而,虽然auto_ptr被摒弃,但它已使用了好多年:同时,如果您的编译器不支持其他两种解决力案,auto_ptr将是唯一的选择。
auto_ptr有什么问题呢
原来的智能指针已经是NULL 不能对ps1进行操作了 所以摒弃auto_ptr的原因是
避免潜在的内存崩溃问题
为了解决这个问题 我们使用 unique_ptr
unique_ptr智能指针之间的 赋值和拷贝构造 都是非法的 eg: ps2 = ps1
但是对临时对象的操作确实合法的 eg: ps2 = demo()
程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做;如果源 unique_ptr 将存在一段时间,编译器将禁止这么做
智能指针的选择
需要多个指针指向同一对象的时候 选择shared_ptr
如果不需要时 选择 unique_ptr 也可以使用 auto_ptr
如果没有 unique_ptr 可以使用boost库里的 scoped_ptr