2013-08-30 47 views

回答

9

它看起來像放置新的。它與普通的new語句相同,但不是實際分配內存,而是使用已存在的內存,並且該內存由括號內的表達式指向。

在你的情況下,它使用的內存在vv[i]創建新vertex對象,然後返回一個指針(即&vv[i])和它分配給v[i]

參見例如this reference瞭解更多詳情。

+1

正確。 Placement new是唯一一個帶有'('after new。'的語法形式。注意,「placement new」在Standardese中有一個含義,不僅僅是「在這個內存位上調用ctor」 – MSalters

+0

另外,刪除'這個位置是一個特殊的,你可以看到它做出一個明確的析構函數調用 –

+0

'&vv [i]'應該等同於'vv + i',對吧? – Graznarak

2

那就是placement new-expression

它正在構建已分配內存的新對象 - 地址爲vv[i]

它調用此allocation function

operator new(std::size_t, void*); 
//      ^^^^ 
//      &vv[i] is passed here 

它簡單的返回第二個參數。然後調用與其類型的參數數量相匹配的構造函數vertex以構建適當的對象。

1

是的,它是一個新的位置,它提供了一個新對象放置的地址。如果你的(& vv [i])等於0xabcdef00,你的新對象將在0xabcdef00中,更加敏銳的你可以檢查C++標準5.3.4。

相關問題