#include <malloc.h>
#include <memory.h>
class Blanks
{
public:
??? Blanks(){}
??? void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
??? void *pvTemp = malloc( stAllocateBlock );
??? if( pvTemp != 0 )
??????? memset( pvTemp, chInit, stAllocateBlock );
??? return pvTemp;
}
int main()
{
??? Blanks *a5 = new( 0xa5 ) Blanks;
??? return a5 != 0;
}
主函數(shù)的new是類中new操作符重載。
但是new后面只有一個參數(shù)0xa5,
而類中函數(shù)的聲明是void *operator new( size_t stAllocateBlock, char chInit );兩個參數(shù)。
怎么會調(diào)用這個類內(nèi)的呢?
這是一個典型的定位new;
上面各個疑點,解釋如下:
1. 重載new操作符第一個參數(shù)必須是size_t類型的。
void operator new(size_t)
??? void operator new(size_t , Blanks*)
2.???? Blanks *a5 = new( 0xa5 ) Blanks;分別表示
0xa5就是參數(shù)char chInit 。
size_t stAllocateBlock就是類的大小。
3.??? 然后,用0xa5初始化分配的那塊內(nèi)存。
??? Blanks *a5 = new( 0xa5 ) Blanks;
這個表達式動作如下:
A.調(diào)用Blanks的操作符 new(size_t, Blanks*)
B.調(diào)用默認的構(gòu)造函數(shù)初始化對象
C.用Blanks對象地址初始化a5.