new int使用細節

2021-08-17 06:22:22 字數 872 閱讀 4872

廢話不多說,先上**:

int a = 5;

int *p = new int[a];

a = 10;

int *p1 = new int[a];

memcpy(p1, p, sizeof(int) * 5);

delete p;

p = p1;

對於動態申請記憶體空間,它的優勢在於大小受到我們的控制,但是缺點在於每次我們更改它的大小的時候,都要把它原本記憶體存放的資料通過memcpy()拷貝出來

那麼這樣每次我們更改大小的時候都要進行三步操作:

//重新申請一塊更大的記憶體空間:

int *p2 = new int[a];

//a > 原來的值

memcpy(p2, p1, sizeof(int) * a);

//此處的a表示原來的大小

//這句話的意思就是把原來的記憶體空間裡的所有資料匯出到新記憶體中

delete p1;

注:memcpy中的a取小的那個,否則會發生陣列越界的錯誤操作,但是編譯器在編譯的時候並不會報錯

上述三步操作就是我們更改記憶體大小的時候所進行的最少操作,那麼它雖然優化了空間的佔比,但是帶來的是時間的耗費

當分配的空間越來越大的時候,所耗費的時間就會越來越明顯。

所以到底是用c中的malloc函式還是用c++中的new函式,取決於自己當前的需求。

注:最後附加一點:

using std::vector

//這種使用(倉庫)的方式要比

using namespace std;

//要好,因為前者只開放了乙個倉庫的**,後者是開啟所有的

VertexHelper使用細節

使用vertexhelper建立出來的資料 int num 8 b2vec2 verts 8 verts 0 set 1.2f ptm ratio,159.5f ptm ratio verts 1 set 240.7f ptm ratio,78.4f ptm ratio verts 2 set 56...

pascal使用細節

1 變數不區分大小寫。2 子界型別定義方法 type month 1.12 letter a h days monday.friday 3 字串變數必須用一對單引號括起來,如果字串本身就有單引號,這個單引號要用兩個連續的單引號表示,如 his name is jim 4 短字串的索引是從0開始的,但...

SourceTree使用細節

1.提交部分 改動10個檔案,但這次只想提交其中5個檔案,怎麼辦?stash貯藏,等提交完之後再把貯藏弄回來。如果不貯藏,無法rebase note 貯藏之前,先得add。寫完commit 資訊之後,在貯藏其他的 2.建立遠端分支 本地分支push到遠端 如果想把本地的某個分支test提交到遠端倉庫...