定位new運算子,它讓你能夠指定要使用的位置,可能使用這種特性來設定其記憶體管理規程,處理需要通過特定位址進行訪問的硬體或在特定位置建立物件。
1,標頭檔案
2,將new運算子用於提供了所需位址的引數。
例如:
程式中的buffer是char指標,如果要訪問buffer1, buffer2 的位址,需使用(void *)進行強制型別轉換。
與常規new運算子不同的是:
1,常規new運算子查詢乙個新的記憶體塊;但定位new運算子使用傳遞給它的位址,它不跟蹤哪些記憶體單元已被使用,也不查詢未經使用的記憶體塊。
2,對於常規new運算子必須要delete掉,才能再次使用該記憶體塊;buffer指定的是靜態記憶體,而delete只能用於指向常規new運算子分配的堆記憶體。也就是說,陣列buffer位於delete的管轄區域之外。
再談new和delete
如果物件是動態變數,當執行完定義該物件的程式塊時,將呼叫該物件的析構函式。
如果物件是靜態變數(外部,靜態,靜態外部或來自命名空間),則在程式結束時將呼叫物件的析構函式。
如果物件是用new建立的,只有當顯示的使用delete刪除物件時,才會呼叫析構函式。
所以顯示地為使用定位new運算子建立的物件呼叫析構函式。
例如:
對於使用定位new運算子建立的物件,應以與建立順序相反的順序進行刪除。原因在於,晚建立的物件可能依賴早建立的物件。另外僅當所有物件都被銷毀後,才能釋放用於儲存這些物件的緩衝區。
p2->~just();
p1->~just();
delete buffer;
定位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 的其...
定位new運算子
一般的new運算子負責在heap堆中找到乙個足以能夠滿足要求的記憶體塊。定位new運算子在標頭檔案中。定位new運算子直接使用傳遞給它的位址,它不負責判斷哪些記憶體單元已被使用,也不查詢未使用的記憶體塊。這將一些記憶體管理的負擔交給了程式設計師。下面用乙個簡單的程式來說明定位new的用法 inclu...