C 定位new的表示式

2021-10-01 08:26:37 字數 797 閱讀 4981

我在學習記憶體池的時候,是先學習的物件池,學的時候很迷惑的一點就是: 物件池,說的是針對於某乙個型別的物件,為這個型別的物件開闢出一段空間,我們要的是空間,返回的就是空間啊,為什麼要對這個空間進行初始化呢? 為什麼要使用new的定位表示式對已有的空間進行初始化呢? 我頓感了許久,和同學們也有討論,下面是我總結的關於new的定位表示式,當然在後面也有解答。

new的表示式是在記憶體中new一塊位址,然後將乙個大小合適的例項化物件放入該位址中的操作。說白了就是在已申請的記憶體空間中呼叫建構函式

obj: 這個位置必須是乙個指標,在這裡obj已經是指向記憶體分配好的記憶體。

t:就是物件的型別,如果是內建型別,則自己會呼叫自己的建構函式,這裡主要是針對於自定義型別,需要使用new的定位表示式來對t物件呼叫建構函式完成初始化。

建立物件但是並不分配記憶體,而是在已有的記憶體obj上建立物件。用於需要反覆,建立並刪除的物件上,可以降低分配釋放記憶體的效能消耗

定位new表示式在實際中一般是配合記憶體池使用。因為記憶體池分配出的記憶體沒有初始化,所以如果是自定義型別的物件需要使用new的定義表示式進行顯示調建構函式進行初始化

也就是說:從記憶體池中開闢空間必須呼叫一次new出的物件的建構函式進行初始化。換句話說就是對一段已有的空間,必須要使用new的定位表示式對已有的空間呼叫物件的建構函式進行初始化。

定位new表示式

定位new表示式使我們能在特定的 已分配的記憶體位置構造物件,它接受指向已分配記憶體但未構造記憶體的指標,並在該指標位置構造乙個物件。他是allocator中的construct成員函式的低階選擇 new place address type new place address type initi...

C 的new和delete表示式

定義變數時,必須指定其資料型別和名字,而建立動態物件時只需要指定其資料型別,而不必為該物件命名 int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整形物件,並返回次兌現光額位址,並用改位址初始化pi 1.動態建立的物件可以用初始化變數的方式實現初始化 int i ...

new和delete表示式

1.系統為每個程式都提供了乙個在程式執行時可用的記憶體池.這個可用記憶體池被稱為程式的空閒儲存區 free store 或堆 heap 執行時刻的記憶體分配被稱為動態記憶體分配 dynamic memory allocation new表示式返回指向新分配的物件的指標.int pi new int ...