小言_互联网的博客

C++资源管理

464人阅读  评论(0)

1、以对象管理资源

      获得资源后立刻放进管理对象

      管理对象运用析构函数确保资源被释放

上面所说的管理对象可以理解为auto_ptr智能指针。由于auto_ptr被销毁时会自动删除它所指之物,所以特别注意别让多个auto_ptr同时指向同一个对象。auto_ptr有一个性质:若通过copy构造函数或copy assignment操作符复制他们,他们就会变成null,而复制所得的指针将取得资源的唯一拥有权。

2、上面的诡异复制行为的解决办法就是“引用计数型智慧指针tr1::shared_ptr”,它持续追踪总共有多少对象指向某笔资源,并在无人指向它时自动删除该资源。但是它无法打破环状引用,就是彼此互相引用。

      由于这个智能指针的复制行为如预期一样,它们可被用于STL容器以及其他“auto_ptr不适用”的语句上。但是注意C++并没有针对“c++动态分配数组”而设计上面两个指针。

3、当函数为普通指针时不能传递RAII class对象(auto_ptr和tr1::shared_ptr)传递给它。这里需要进行显示转换或者隐式转换。

显式转换:这两个智能指针都有一个get函数返回智能指针内部的原始指针。

隐式转换:这两个智能指针也重载了操作符 operator-> 和operator* ,他们允许隐式转换至底部原始指针。

4、new delete解析

 当你使用new生成一个动态对象,有两件事发生。第一:内存被分配出来。第二:针对此内存会有一个构造函数被调用。

当你使用delete时也有两件事:针对此内存有析构函数被调用,然后内存被释放。delete问题在于即将被删除的内存之内究竟有多少对象?这个取决于有多少析构函数被调用。(单一对象和对象数组的区别)。所以要观察delete 后面是否有【】,有的化表示数组。delete要和new的使用相对应。

5、不能将原始指针转化成智能指针,必须调用智能指针的构造函数。

 

 


转载:https://blog.csdn.net/qq_30122883/article/details/101537702
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场