11 過載示例(下)

2021-08-01 18:05:43 字數 1785 閱讀 7717

我們可以過載class member operator new(),寫出很多版本,前提是每一版本的宣告都必須有獨特的引數列表,其中第乙個引數必須是size_t,其與引數以new所指定的placement arguments為初值。出現於new(......)小括號內的便是所謂placement arguments。

foo* pf = new (300, 'c') foo;

我們可以過載class member operator delete(),寫出很多版本。但它們絕不會被delete呼叫。只有當new所呼叫的ctor丟擲exception,才會呼叫這些過載版本的operator delete()。它只可能這樣被呼叫,主要用來歸還未能完全建立成功的object所占用的memory。

#include #include using namespace std;

class bad ;

class foo

foo(int)

public:

//(1)這個就是一般的operator new()的過載

void* operator new(size_t size)

//(2)這個就是標準庫已提供的placement new() 的過載(的形式)

//(所以我也模擬stand placement new,就只是傳回pointer)

void* operator new(size_t size, void* start)

//(3)嶄新的placement new

void* operator new(size_t size, long extra)

//(4)這又是乙個placement new

void* operator new(size_t size, long extra, char init)

//(5)這又是乙個placement new,但故意寫錯第一引數的type

//(那必須是size_t以符合正常的operato new)

//! void* operator new(long extra, char init)

//以下是搭配上述placement new 的各個所謂placement delete.

//當ctor發出異常,這兒對應的operator (placement) delete 就會被呼叫

//其用途是釋放對應之placement new分配所得的memory.

索引器(2)過載

看了 陳廣老師的索引器挺不錯的 學習了class coursescore public string name set public int courseid set public int score set class coursescoreindexer public int this stri...

C 入門(6)過載

過載 using system class vector 獲取向量的長度 public double getlength 過載運算子 public static bool operator vector a,vector b 過載運算子 public static bool operator vec...

20200405 過載和重寫

公尺格爾 格林貝格,近30年開發經驗的軟體工程師,以撰寫python專案開發的部落格而廣為python開發者所熟知,經常受邀在pycon等大會上分享開發經驗。代表作有 flask web開發 基於python的web應用開發實戰 第2版 1 過載與重寫的區別。答 一 定義上的區別 過載是指不同的函式...