#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;
}
主函數的new是類中new操作符重載。
但是new后面只有一個參數0xa5,
而類中函數的聲明是void *operator new( size_t stAllocateBlock, char chInit );兩個參數。
怎么會調用這個類內的呢?
這是一個典型的定位new;
上面各個疑點,解釋如下:
1. 重載new操作符第一個參數必須是size_t類型的。
void operator new(size_t)
??? void operator new(size_t , Blanks*)
2.???? Blanks *a5 = new( 0xa5 ) Blanks;分別表示
0xa5就是參數char chInit 。
size_t stAllocateBlock就是類的大小。
3.??? 然后,用0xa5初始化分配的那塊內存。
??? Blanks *a5 = new( 0xa5 ) Blanks;
這個表達式動作如下:
A.調用Blanks的操作符 new(size_t, Blanks*)
B.調用默認的構造函數初始化對象
C.用Blanks對象地址初始化a5.