我們可以過載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 過載與重寫的區別。答 一 定義上的區別 過載是指不同的函式...