zoukankan      html  css  js  c++  java
  • C++ RAII

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

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

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

    #include <iostream>
    
    using namespace std;
    
    template<class T>
    class Raii {
    public:
    	Raii(T * ptr_ = nullptr):ptr(ptr_) {
    	}
    	~Raii(){
    		if (nullptr != ptr) {
    			cout << "delete ptr" << endl;
    			delete ptr;
    		}
    	}
    	T & operator*() {
    		return *ptr;
    	}
    	T * operator->() {
    		return ptr;
    	}
    private:
    	T * ptr;
    };
    
    #include "RAII.h"
    
    int main()
    {
        int * ptr = new int();
        Raii<int> raii(ptr);
        return 0;
    }

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

    参考资料:

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

  • 相关阅读:
    小明系列问题——小明序列
    Multiplication Table
    DZY Loves Colors
    Points
    Tree
    img标签中alt属性与title属性在seo的作用-摘自网友
    如何合理命名CSS文件——摘自网友
    <meta http-equiv="X-UA-Compatible" content="IE=7" />
    英语
    10个CSS简写/优化技巧-摘自网友
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/14883537.html
Copyright © 2011-2022 走看看