在研究new和delete運算子之前,先來介紹下c++的資料儲存方式,對於c++來說,資料有兩種儲存方式,即棧儲存和堆儲存。
棧儲存:通常用於儲存占用空間小,生命周期短的資料,如區域性變數和函式引數等等。
堆儲存:通常用於儲存占用空間大,生命週期長的資料,如全域性變數和靜態變數等等。
因此,如果使用者想要不用靜態變數和全域性變數來定義乙個儲存在堆中的資料的話,則需要用到new運算子。
例:int *pvar = new int;//定義乙個整形指標,呼叫new運算子在堆中為其分配記憶體
*pvar = 10;//設定指標的值
delete pvar;//釋放指標指向的堆空間
上述**中,呼叫了new運算子在堆中開闢了4位元組的空間,將位址指向了指標pvar。接著設定指標pvar的資料然後輸出資料,最後呼叫delete運算子釋放pvar指向的堆空間。
warning:對於手動分配的堆空間,在使用後一定要釋放堆空間,否則會出現記憶體洩漏。
在使用new運算子分配空間時,還可以進行初始化。
int *pvar = new int(10);
使用new運算時,還可以為資料動態分配空間。
int *pvarr = new int[5];
delete 可以用了釋放使用new為資料分配的空間
int *pvar = new int[5];
delete pvar;
warning:上面的**中,如果使用delete pvar 來釋放空間也是可以的,不過在開發的過程中不建議這麼做,因為對於加單的基礎資料型別(上述為int),沒有提供析構函式,使用"delete pvar"語句釋放陣列的時候不會出現記憶體洩露,但是對於類物件陣列來說這樣是不行的,必須使用delete 的形式
條款8 了解各種不同意義的new和delete
new operator,這個操作符是由語言內建的,不能被改變意義,總是做相同的事情。它的動作分為兩方面 第一,它分配足夠的記憶體,用來放置某型別的物件。第二,它呼叫乙個constructor,為剛才分配的記憶體中的那個物件設定初值。你能夠改變的是用來容納物件的那塊記憶體的分配行為。new oper...
mybatis筆記之關於 和
1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接顯示生成在sql中。如 order by u...
C 學習筆記3 new
c 學習過程中經常會碰到一些關於元素的插入與刪除。就容器而言,在容器物件中insert或者壓入乙個元素時,該物件大小會增加1。在分析容器與陣列區別的時候,提出了,陣列的大小是指定的,而容器的大小動態的。當時我也思考到,new和delete也是動態的建立陣列的,這又該怎麼解釋呢?於是我把教材中關於ne...