new 操作符和 new 操作的區別

2021-07-29 09:57:56 字數 1015 閱讀 7401

**

操作符(new operator) 和 new操作(operator new)的區別。

當你寫這樣的**: string *ps = new string(「memory management」);

你使用的 new 是 new 操作符。這個操作符就象 sizeof 一樣是語言內建的,你不能改變它的含義,它的功能總是一樣的。它要完成的功能分成兩部分。第一部分是分配足夠的記憶體以便

容納所需型別的物件。第二部分是它呼叫建構函式初始化記憶體中的物件。new操作符總是做這兩件事情,你不能以任何方式改變它的行為。

你所能改變的是如何為物件分配記憶體。new 操作符呼叫乙個函式來完成必需的記憶體分配,你能夠重寫或過載這個函式來改變它的行為。new 操作符為分配記憶體所呼叫函式的名字是 operator new

函式 operator new 通常這樣宣告:

void * operator new(size_t size); //引數 size_t確定分配多少記憶體

返回值型別是 void*,因為這個函式返回乙個未經處理(raw)的指標,未初始化的記憶體

你一般不會直接呼叫 operator new,但是一旦這麼做,你可以象呼叫其它函式一樣呼叫它:

void *rawmemory = operator new(sizeof(string));

操作符operator new將返回乙個指標, 指向一塊足夠容納乙個string型別物件的記憶體。

就象 malloc 一樣,operator new 的職責只是分配記憶體。它對建構函式一無所知。operator new所了解的是記憶體分配

void *memory = // 得到未經處理的記憶體

operator new(sizeof(string)); // 為 string物件

call string::string(「memory management」) //初始化

on *memory; // 記憶體中 // 的物件

string *ps = // 是 ps指標指向

static_cast

布局new操作符

通常,new負責在堆 heap 中找到乙個足以滿足需要的記憶體塊。new操作符還有另一種變體,被稱為布局new操作符,能夠讓你指定要使用的位置。程式設計師可以利用這種 要使用布局new特性,首先要包含標頭檔案new,他提供了這種new操作的原型。const int buf 512 class jus...

模擬new操作符

function imitatenew func,args let person imitatenew function name,age alima 17 複製 使用new操作符呼叫建構函式經歷的步驟 建立乙個新物件,繼承建構函式的原型物件 將建構函式的作用域賦給新物件 this指向新物件 執行建...

實現new操作符

new操作符返回乙個物件,所以需要在函式內部返回乙個物件。這個物件,也就是建構函式中的this,可以訪問到掛載在this上的任意屬性。這個物件可以訪問到建構函式原型上的屬性,所以需要將物件與建構函式鏈結起來。只有返回值是物件,才進行正常處理。const create constructor,args...