這是封閉在一個for循環:我不認爲這是鑄造,但它是什麼?
v[i] = new (&vv[i]) vertex(pts[i],i);
vertex
是struct
pts
是point*
v
是vertex**
vv
是vertex*
(&vv[i])
部件是做什麼的?
這是封閉在一個for循環:我不認爲這是鑄造,但它是什麼?
v[i] = new (&vv[i]) vertex(pts[i],i);
vertex
是struct
pts
是point*
v
是vertex**
vv
是vertex*
(&vv[i])
部件是做什麼的?
它看起來像放置新的。它與普通的new
語句相同,但不是實際分配內存,而是使用已存在的內存,並且該內存由括號內的表達式指向。
在你的情況下,它使用的內存在vv[i]
創建新vertex
對象,然後返回一個指針(即&vv[i]
)和它分配給v[i]
。
參見例如this reference瞭解更多詳情。
它正在構建已分配內存的新對象 - 地址爲vv[i]
。
它調用此allocation function:
operator new(std::size_t, void*);
// ^^^^
// &vv[i] is passed here
它簡單的返回第二個參數。然後調用與其類型的參數數量相匹配的構造函數vertex
以構建適當的對象。
這是允許將對象放置在指定內存位置的放置新選項。見http://www.parashift.com/c++-faq/placement-new.html和What uses are there for "placement new"?。
是的,它是一個新的位置,它提供了一個新對象放置的地址。如果你的(& vv [i])等於0xabcdef00,你的新對象將在0xabcdef00中,更加敏銳的你可以檢查C++標準5.3.4。
請說明清楚 –