经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++ RAII
来源:cnblogs  作者:张杨  时间:2021/6/15 9:19:29  对本文有异议

    今天学习了C++中的RAII机制,主要是应对内存泄露的情况,通过将内存的动态申请放置在构造函数中,将动态内存的释放放置在析构函数中实现。

    (1)malloc出来的空间,没有进行释放,存在内存泄漏;
    (2)如果在malloc和free之间抛异常,那么同样存在内存泄漏问题。该问题称为异常安全问题。

    这样,就将内存管理的职责下放给了对象,可以利用函数调用栈完成动态内存的管理,示例代码如下:

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template<class T>
  6. class Raii {
  7. public:
  8. Raii(T * ptr_ = nullptr):ptr(ptr_) {
  9. }
  10. ~Raii(){
  11. if (nullptr != ptr) {
  12. cout << "delete ptr" << endl;
  13. delete ptr;
  14. }
  15. }
  16. T & operator*() {
  17. return *ptr;
  18. }
  19. T * operator->() {
  20. return ptr;
  21. }
  22. private:
  23. T * ptr;
  24. };
  1. #include "RAII.h"
  2.  
  3. int main()
  4. {
  5. int * ptr = new int();
  6. Raii<int> raii(ptr);
  7. return 0;
  8. }

  可以看到,离开作用域后,ptr被Raii类的析构函数释放动态内存。

 

参考资料:

https://blog.csdn.net/Willing_hope/article/details/108233756

 

原文链接:http://www.cnblogs.com/JsonZhangAA/p/14883537.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号