2010-04-23 53 views
8

in C,malloc()返回void*。但在C++中,new返回什麼?什麼是在c + +新的返回類型?

double d = new int; 
+5

@Suma:雖然我基本上你對鑑人的情緒問題達成一致,我相信這是一個真正的和_new表情的和_new operator_之間的重要區別是當爲「運營商新」搜索時很難得到。 – sbi 2010-04-23 11:07:06

+7

@Suma:一個糟糕的問題仍然會導致很好的答案。 – 2010-04-23 12:23:23

+0

http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free – 2010-04-23 15:09:06

回答

8

的值類型來自new Type[x]回來,new TypeType *。你的榜樣double d = new int包含兩個錯誤:

  • 需要將結果賦值爲指針,像這樣:double *d = new int
  • 指針必須是一個指向類型或東西,它可以將指針類型轉換使用隱式轉換:int *d = new intvoid *d = new int
30

有兩件事你必須區分。一種是新的表達。它是表達式new T,其結果是T*。它會做兩兩件事:第一,它調用新的運營商分配內存,然後調用構造函數 T.(如果構造與異常中止,這也將調用delete操作符)。

上述新運營商然而,有幾種口味。最突出的是這一個:

void* operator new(std::size_t); 

你可以明確地調用它,但這很少做過。

還有其他形式的新的運營商的,例如用於陣列

void* operator new[](std::size_t); 

或所謂放置新(這確實是一個假的全新的,因爲它沒有分配):

void* operator new(void*, std::size_t); 
+0

例如int * p = new int,它返回int *,那麼簽名如何具有void *? – kam 2010-04-23 11:10:15

+1

一個愚蠢的問題很好的答案。海報似乎沒有任何關於「新」如何融入該語言的想法。答案很好地解釋了這一點。 – Suma 2010-04-23 11:11:59

+0

「int p = new int,它返回int,」它不。我返回int *(指向int的指針)。 – Suma 2010-04-23 11:12:28