最近做乙個事情,實現乙個流程互動,其中主互動流程函式中,涉及較多的記憶體申請,
而健康的函式,都是在函式退出前將手動申請不再需要的記憶體釋放掉,
使用很多方法,都避免不了較多的出錯分支時,一堆的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 返回的並不一定相容,不要...