記憶體分配與**,一直都是令c/c++程式設計師們頭痛的事情,不使用指標會降低程式的靈活性,同時也等於放棄了c/c++語言最大的優勢,而使用指標就必須保證在任何情況下都不能出錯,否則後果的嚴重性相信每個程式設計師都深有體會無需多講。因此,在指標的使用上面,所有的程式設計師都戰戰兢兢,如履薄冰,同時相信每個人也都在不停的思考,並且總結出一套適合自己的方法去解決這個問題。本文使用模版類建立了乙個對所有型別指標都通用的記憶體管理模版,目的是實現如下最基本的功能:
1. 對任何指標變數均通用
2. 可以安全的分配所需的記憶體
3. 無需程式設計師操作,實現資源的自動釋放
類宣告如下:
template
class cmemassign
;template
cmemassign::cmemassign()
template
cmemassign::~cmemassign()
}template
t*cmemassign::createinstance(const long nlength) //建立例項分配記憶體
pt_var=new t[nlength];
assert(pt_var!=null); //分配異常
if (pt_var==null)
int ndebug;
ndebug=0;
}return pt_var; //返回
}template
long cmemassign::getlength()
該類通過模版可以相容所有變數型別,為了相容類型別保證建構函式和析構函式的能夠被呼叫,在記憶體的建立和銷毀時採用new和delete運算子。變數pt_var實際上就是在類外使用的指標,它通過createinstance產生,並且只能被分配一次,該變數隨著例項的生命週期的結束而銷毀,無需程式設計師作任何操作。
程式示例如下:
void test()
當函式test執行結束,m_assign的生命週期結束,由例項管理的記憶體自動銷毀。
但由於pt_var指標被返回到了類外部,因此可以在外部被銷毀,這一點為該模版安全性上留下了隱患,有待進一步改進
指標以及記憶體的分配
1.指標很靈活,這使得指標很難管理,在定義指標時,將在棧中開闢一塊記憶體存放指標的位址 棧內的記憶體由系統分配和釋放 指標的位址記憶體只是存放指標的位址,不存放指標指向的資料,值得注意的是,定義指標時指標會隨機指向一塊記憶體,如int p p會指向一塊不為空的記憶體,相當危險,例如執行判斷if p ...
類物件的記憶體分配
類的大小一般是指經過例項化後類物件的大小。1真空類 長度 1 class a 2空類 長度1,同真空類。class a public a a void fun 成員函式不會影響類的大小。3簡單類,長度4 class a 4有虛函式的類 長度 4 class a 注1 虛函式表 如果基類派生類定義了虛...
指標與陣列的記憶體分配
部落格搬家 在實踐中經常遇到這樣的情況 二維陣列 指向指標的指標 指標陣列 陣列指標 的使用,經常容易混淆,這裡從記憶體分配的情況進行對比 二維陣列 char a 2 3 二維陣列的記憶體分配情況 指向指標的指標 char p1 指標的指標在記憶體分配時先為指標p1 外層 分配記憶體 p1 char...