C 函式中,兩個自動釋放記憶體的動態記憶體申請類

2021-09-26 16:38:37 字數 2002 閱讀 1632

最近做乙個事情,實現乙個流程互動,其中主互動流程函式中,涉及較多的記憶體申請,

而健康的函式,都是在函式退出前將手動申請不再需要的記憶體釋放掉,

使用很多方法,都避免不了較多的出錯分支時,一堆的if free/delete,**長而且不好管理

因此,利用c++物件離開作用域會自動呼叫析構函式的特點,在這兒實現了兩個自動釋放記憶體的動態記憶體申請類

第乙個類,只管理記憶體,不並管理物件

#include class xautofreemem

; virtual xautofreemem::~xautofreemem()

}//通過此介面來申請記憶體

void* malloc_mem(unsigned int nsize)

return ptr;

}};

第二個類,能夠同時支援記憶體管理、物件管理

typedef void (*delete_obj_func)(void*);

class xautofreeobject : public xautofreemem

object_manager_st;

protected:

templatestatic void free_object(t* p_this)

templatestatic void free_objects(t* p_this)

protected:

std::vectorvec_objects_;

public:

xautofreeobject::xautofreeobject() {};

virtual xautofreeobject::~xautofreeobject()

}//物件

//通過此介面來建立物件

templatevoid new_object(t** ppobj)

*ppobj = (t*)(stobjman.obj_this);

return;

}//通過此介面來建立物件

templatevoid new_object_with_param(t** ppobj, p param)

*ppobj = (t*)(stobjman.obj_this);

return;

}//通過此介面來建立物件,這幾個介面使用會麻煩一些,使用示例:std::string* pstr = stautomanager.new_object();

templatet* new_object()

return (t*)(stobjman.obj_this);

}//通過此介面來建立物件

templatet* new_object_with_param(p param)

return (t*)(stobjman.obj_this);

}//物件陣列

//通過此介面來建立物件陣列

templatevoid new_objects(t** ppobj, int num)

*ppobj = (t*)(stobjman.obj_this);

return;

}//通過此介面來建立物件陣列

templatevoid new_objects_with_param(t** ppobj, int num, p param)

*ppobj = (t*)(stobjman.obj_this);

return;

}//通過此介面來建立物件陣列

templatet* new_objects(int num)

return (t*)(stobjman.obj_this);

}//通過此介面來建立物件陣列

templatet* new_objects_with_param(int num, p param)

return (t*)(stobjman.obj_this);

}};

呼叫示例如下:

int main(int argc, char* ar**)

return 0;

}

C 中記憶體分配和釋放的函式

c語言的標準記憶體分配函式有 malloc,calloc,realloc,free等。c 的記憶體分配和釋放函式為new和delete。下面對alloca malloc calloc realloc等函式進行詳細說明。alloca是向棧申請記憶體,無需進行釋放。malloc分配的記憶體是位於堆中的,...

c和c 中的記憶體分配和記憶體釋放函式

c語言中的free 對應malloc 或delete 對應c 中的new 來釋放 例 char pt1,pt2 pt1 char malloc 100 pt2 pt1 free pt1 pt1 null return 0 第一行定義兩個字元指標,但沒有賦初值,編譯器只給pt1 pt2個分配兩個位元組...

C中的動態記憶體分配和釋放 free

c 整合 new 和 delete 操作進行動態記憶體分配,但是在 c 語言中無效。c 語言中使用函式庫來解決,即在頭 在 c 中稱為 中定義的函式 malloc,calloc realloc,free 這些函式在 c 中依然有效。但是使用上面函式分配的記憶體塊和用 new 返回的並不一定相容,不要...