RALL是什么
RALL为资源获取初始化,使用局部对象向来管理资源的技术称为资源获取即初始化
这里的内存资源主要是指操作系统中有限的东西比如:内存,网络套接字,互斥量,文件句柄等等,局部对象是由操作系统来管理的无需人工介入.
1 RALL的原理
资源的使用一般经历三个步骤
获取资源(创建对象)
使用资源
销毁资源(析构对象)
什么是智能指针,裸指针存在的问题
智能指针是比原始指针更智能的类,解决悬空指针或者多次删除被指向对象,以及资源泄漏的问题,通常用来确保指针的寿命和对象的寿命一致
裸指针存在很多问题
1难以区分指向的是单个对象还是一个数组
2使用完指针后无法判断是否应该销毁指针,因为指针无法判断是否拥有的对象
3在已经确定需要销毁指针的情况下,也无法确定是用delete关键字删除,还是有其他特殊的销毁机制,例如通过将指针传入某个特定的销毁函数来摧毁指针
4即使已经确定了销毁指针的方法,由于1的原因,仍然无法确定到底是i用delete(销毁单个对象)还是delete[](销毁一个数组)
5 假设上述的问题都解决了,也很难保证在代码的所有路径中(分支结构,异常导致的挑战),有且仅有一次销毁指针的操作;任何一条路径遗漏都可能导致内存的泄露,而销毁多次则会导致未定义行为
6 理论上没有方法来分辨一个指针是否处于悬挂状态
c11 四个智能指针 :
auto_ptr ,unique_ptr,shared_ptr,weak_ptr
为什么auto_ptr会被弃用
class Object
{
int value;
public:
Obje