先放這兒,有時間了,在作詳細整理.
c++ new用法的正確方法應該如何操作?
在這篇文章中我們將會根據其兩種不同的含義分別介紹一下它的影音方法,
希望能給大家帶來一些幫助。
c++ 程式語言中有一
種叫做new的術語。不過這一概念是比較模糊的,有些人把它理解為new函
數,但是有的人又會把它理解為new運算子。那麼它的真正含義又是如何的
呢?在這裡我們將會通過對c++ new用法的介紹,幫助大家一起分析一下。
*c++ new用法之一 new運算子*
最常用的是作為運算子的new,比如:
string *str = new string(「test new」);
作為運算子,new和sizeof一樣,是c++內建的,你不能對它做任何的改變,
除了使用它。
new會在堆上分配一塊記憶體,並會自動呼叫類的建構函式。
*c++ new用法之二 new函式*
第二種就是new函式,其實new運算子內部分配記憶體使用的就是new函式,原
型是:void *operator new(size_t size);
new函式返回的是乙個void指標,一塊未經初始化的記憶體。如你所見,這和c
語言的malloc行為相似,你可以過載new函式,並且增加額外的引數,但是
必須保證第乙個引數必須是size_t型別,它指明了分配記憶體塊的大小,c++
允許你這麼做,當然一般情況下這是不必要的。如果過載了new函式,在使
用new操作符時呼叫的就是你過載後的new函式了。
如果使用new函式,和語句string *str = new string(「test new」)相對的
**大概是如下的樣子:
1. string *str = (string*)operator new(sizeof(string));
2. str.string(「test new」);
3. // 當然這個呼叫時非法的,但是編譯器是沒有這個限制的
這還不算完,還有第三種的new存在。
*c++ new用法之三 placement new*
第三種,placement new,這也是new作為函式的一種用法,它允許你在一塊
已存在的記憶體上分配乙個物件,而記憶體上的資料不會被覆蓋或者被你主動改
寫,placement new同樣由new操作符呼叫,呼叫格式是:
new (buffer) type(size_t size);
先看看下面的**:
1. char str[22];
2. int data = 123;
3. int *pa = new (&data) int;
4. int *pb = new (str) int(9);
結果*pa = 123(未覆蓋原資料),而*pb = 9(覆蓋原資料),可以看到
placement new 並沒有分配新的記憶體,也可以使用在棧上分配的記憶體,而不
限於堆。
為了使用placement new 你必須包含或者
其實placement new和第二種一樣,只不過多了引數,是函式new的過載,語
法格式為:
void *operator new(size_t, void* buffer);
它看起來可能是這個樣子:
void *operator new(size_t, void* buffer)
和new對應的就是delete了,需要**記憶體啊,不然就洩漏了,這個下次再
寫吧,回憶一下今天的內容先。
*總結*
1. 函式new
void *operator new(size_t size); 在堆上分配一塊記憶體,和placement
new(void *operator new(size_t, void* buffer)); 在一塊已經存在的
記憶體上建立物件,如果你已經有一塊記憶體,placement new會非常有用,事
實上,它stl中有著廣泛的使用。
2. 運算子new
最常用的new,沒什麼可說的。
3. 函式new不會自動呼叫類的建構函式,因為它對分配的記憶體型別一無所
知;而運算子new會自動呼叫類的建構函式。
4. 函式new允許過載,而運算子new不能被過載。
5. 緊接著就是對應的delete。
以上就是對c++ new用法的詳細介紹。
c 中new的用法
c 中,new的用法很靈活,這裡進行了簡單的總結 x5 t d s v v9 n w j 1.new 分配這種型別的乙個大小的記憶體空間,並以括號中的值來初始化這個變數 u t,v u 2.new 分配這種型別的n個大小的記憶體空間,並用預設建構函式來初始化這些變數 8 a6 r i 6 g m l...
C 中new的用法
1 開闢單變數位址空間 new int 開闢乙個存放陣列的儲存空間,返回乙個指向該儲存空間的位址.int a new int 即為將乙個int型別的位址賦值給整型指標a。int a new int 5 作用同上,但是同時將整數賦值為5。2 開闢陣列空間 要訪問new所開闢的結構體空間,無法直接通過變...
C 中new的用法
new int 開闢乙個存放整數的儲存空間,返回乙個指向該儲存空間的位址 即指標 new int 100 開闢乙個存放整數的空間,並指定該整數的初值為100,返回乙個指向該儲存空間的位址 new char 10 開闢乙個存放字元陣列 包括10個元素 的空間,返回首元素的位址 new int 5 4 ...