最近做一个事情,实现一个流程交互,其中主交互流程函数中,涉及较多的内存申请,
而健康的函数,都是在函数退出前将手动申请不再需要的内存释放掉,
使用很多方法,都避免不了较多的出错分支时,一堆的if free/delete,代码长而且不好管理
因此,利用C++对象离开作用域会自动调用析构函数的特点,在这儿实现了两个自动释放内存的动态内存申请类
第一个类,只管理内存,不并管理对象
#include <vector> class XAutoFreeMem { protected: std::vector<void*> vec_memorys_; public: XAutoFreeMem::XAutoFreeMem() {}; virtual XAutoFreeMem::~XAutoFreeMem() { //释放对象时,释放管理的内存 for(auto item : vec_memorys_){ free(item); } } //通过此接口来申请内存 void* malloc_mem(unsigned int nsize) { void* ptr = malloc(nsize); if (nullptr != ptr) { vec_memorys_.push_back(ptr); } return ptr; } };
第二个类,能够同时支持内存管理、对象管理
typedef void (*delete_obj_func)(void*); class XAutoFreeObject : public XAutoFreeMem { private