2011-12-09 127 views
2

雖然我是定義在一個類中聲明重載new運算符的工作, 我碰到下面的困惑來到....超載的「新」運營商

  1. 這裏,函數的返回類型爲'空',但我 必須引入返回聲明.....否則我的程序崩潰....爲什麼這樣?
  2. 什麼是 「無效* P」

    void *myclass::operator new(size_t size) 
    { 
    void *p; 
    p=malloc(size); 
    cout<<"IN overloaded new"; 
    if(!p) 
    { 
        bad_alloc ba; 
        throw ba; 
    } 
    return p; 
    } 
    

    的一點澄清的意思表示讚賞。

回答

1

void*是一個無類型的指針。這是一個指向任何東西的指針。請注意,該函數的返回類型不是void,而是void*。它應該返回一個指向已分配內存的指針。

6

該函數的返回類型不是void,它是一個void *(void指針)。 void指針是一個通用的指針,它可以指向任何東西,但不能解除引用 - 您必須在將其解除引用之前將其轉換爲其他類型。

如果你沒有返回void *,那麼你沒有返回指向你分配的內存的指針,並且用戶代碼將失敗。

+3

用戶代碼將失敗_if you lucky_。 – Mankarse

+0

非常真實:) dontcha只是愛未定義的行爲? –

0

重載新

void* operator new(size_t num) 
{ 
return malloc(num); 
} 

重載新的返回類型的簡單演示必須是void *。預計會返回一個指向分配內存塊的開始的指針。在這裏它返回void *而不是void(這意味着不返回任何東西)。