定位的new和new 運算子

2021-04-24 17:12:33 字數 1386 閱讀 9709

同一作用域下的同名函式,只要引數列表不同,即可過載。過載

new和

new[ ]

運算子時,函式的第

1個引數是固定的,表示申請分配記憶體的長度。使用者在不改變第

1個引數的情況下,可以隨意增加引數,過載多個

new和

new[ ]

運算子函式。乙個比較實際的例子就是過載定位的

new和

new[ ]

運算子,即為

new和

new[ ]

過載函式增加

1個指標型別的引數,

new和

new[ ]

表示式呼叫時,返回該指標指定位置的記憶體位址。

1   //程式示例

2#include"malloc.h"

3#include

4using std::cout;

5using std::endl; 6

7class point 8

15~point()

1620

void* operator new(size_t, double* p)

2124

void operator delete (void* ,double*)

25{}

26};

2728void print(double * d,int n)

2934int main()

35;37

print(d,6);

3839

point* p=new(d+2) point(100,100);

40print(d,6);

4142

p->point::~point();

43print(d,6);

4445

return 0;

46}顯示結果:

1.11.21.31.4 1.51.61個

point

物件被建立

1.11.2100100 1.51.61個

point

物件被釋放

1.11.200 1.51.6

當定位new

運算子是在已經分配好的記憶體上進行二次分配時,為了避免同一塊記憶體被釋放多次,所以,最好不要使用

delete

表示式釋放定位的

new運算子所分配的記憶體。對於本例來說,陣列

d的記憶體來自於棧,

main

函式結束時將自動釋放,如果在程式中使用類似

delete p

這樣的表示式,必然引起程式出現錯誤。那麼,為了在不使用

delete

表示式的情況下,也能夠呼叫

point

物件析構函式,我們可以向第42

行**那樣進行析構函式的顯示呼叫。

定位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...