過載new delete自定義記憶體管理

2021-08-10 03:11:27 字數 1171 閱讀 5376

new/delete是c++預定義的操作符。

new/delete行為:

–new

1、獲取足夠大的記憶體空間(預設是堆空間)

2、呼叫類的建構函式建立物件

–delete

1、呼叫析構函式銷毀物件

2、**記憶體空間(預設為堆空間)

不管是new還是delete操作,都有兩步,new和delete操作是對稱的。

c++中new/delete操作符是可以過載的。

–全域性過載(不推薦)

–區域性過載(在具體的類中過載)

過載c++的new/delete操作符的意義在於改變動態建立物件時記憶體的分配方式。

【new/delete的過載方式】

void* operator

new (unsigned

int size)

void

operator

delete(void* p)

【程式設計實驗】在靜態儲存區建立動態物件

/*testmem.h

*過載new/delete操作符

*在靜態儲存區建立動態物件實驗

*/#include

#include

using

namespace

std;

class test

}return ret;

}void

operator

delete(void* p)}}

};char test::c_buffer[test::count * sizeof(test)] = ;//為靜態成員變數賦值

char test::c_map[test::count] = ;//為靜態成員變數賦值

#include "testmem.h"

#include

using

namespace

std;

int main()

vs2015執行結果:

new success:00f7b138

delete success:00f7b138

【程式設計實驗】在指定記憶體位址建立動態物件

Docker 內自定義網路

link 互聯例如 有1個映象 centos 我希望,通過建立乙個容器centos02能聯通乙個已經建立好的容器centos01,如下 root localhost docker run it p name centos02 link centos01 centos bin bash root lo...

priority queue自定義型別過載

prioroty queue我們可以認為就是乙個堆,我們堆的性質和std裡面的這個容器其實定義性質都是差不多的。在預設情況了,qriority queue堆頂元素是最大的,也就是大堆,但是我們往往知道如果是內建型別我們想換成小堆只需要加上priority就可以了這樣也是比較簡單的,雖然加上這麼乙個堆...

達內課程 自定義異常

這篇文章是基於達內課程 安卓頁面和元件練習專案 航空訂票系統 專案基礎上寫的 wrongpasswordexception usernamenotfoundexception 1 選擇乙個合適的父類 2 只需要新增何止的構造方法 在登入頁增加異常處理,新增兩個異常類 wrongpasswordexc...