new運算子的使用

2021-10-10 20:37:46 字數 1091 閱讀 9354

c++中使用new運算子來申請記憶體,其基本格式為:

int * p1 = new int;             //分配乙個未初始化的int記憶體

int * p2 = new int(6); //分配乙個int記憶體,並用括號內的值初始化

int * p3 = new int [3] ; //分配一組int記憶體,並用花括號內的值初始化

也可以使用new運算子為乙個結構體申請記憶體,這裡有乙個坑,詳情可以看這裡。例如:

struct car;

car * p = new car;

一旦使用new申請了記憶體就要妥善管理,如果乙個用new申請的記憶體失去了指向它的指標,就會導致記憶體洩漏。這些記憶體需要等到程式結束時才會被**,有些不健壯的作業系統甚至在程式結束之後都不會對這些記憶體進行**。例如:

int * p1 = new int (27);

int distract = 23;

p1 = &distract; //p1指向另乙個位址時,沒有妥善管理動態記憶體,造成記憶體洩漏

在使用定位new運算子的時候,使用的是給定的位址。這種用法會以給定的位址為起始位址,往後使用給定尺寸的記憶體。但是不會檢驗這些記憶體是否被使用,使用時的資料會直接覆蓋記憶體中的原始資料。該運算子進行的操作實際上是將給定指標型別強行轉換成需要型別的指標,事實上這種操作可以使用強制型別轉化來實現,兩者能達到的效果一致。例如:

static char buffer[20];

int * p1 = (int*)buffer;

for(int i = 0; i < 5; i++)

for(int i = 0; i < 8; i++)

int * p2 = new (buffer) int[5];

for(int i = 0; i < 5; i++)

for(int i = 0; i < 8; i++)

C 使用 定位new運算子

通常,new負責在堆 heap 中找到乙個足以能夠滿足要求的記憶體塊。new運算子還有一種變體,被稱為定位 placement new運算子,它能讓我們向編譯器指定要使用的位置。程式設計師可以使用這種特性來設定其記憶體管理規程,處理需要通過特定位址進行訪問的硬體或者在特定位置建立物件。要使用這一特性...

定位new運算子

通常,new 從堆中分配記憶體,但它還有另一種稱為 定位 placement new 運算子,它可以讓我們指定要使用的位置。可以通過這個特性來設定記憶體管 理規程,處理需要通過特定位址進行訪問的硬體或在特定位置建立物件。要使用定位 new 特性,需要包含標頭檔案 new。使用定位 new 運算子時,...

定位 new 運算子

定位 new 運算子 和普通的new 運算子在堆上隨機分配記憶體相比,定位 new 運算子可以在特定的位址位置 定位 new 運算子的具體使用例項 const int buf 512 const int n 5 char buffer buf void part9 newplace 定位new 的其...