3
當我做了以下內容:在MSVC 2012中放置新陣列時出錯?
T* ptr2 = new (ptr1) T();
我獲得PTR1 == PTR2
當我這樣做:
T* ptr2 = new (ptr1) T[6];
我獲得,2012 MSVC下調試,PTR2 > ptr1(off by 3 bytes)
但是,「新」文件中的代碼是:
inline void *__CRTDECL operator new[](size_t, void *_Where) _THROW0()
{ // construct array with placement at _Where
return (_Where);
}
我假設一些調試信息被加入,但我不能讓這個
通過的malloc獲得的初始PTR1感,所以我認爲它應該對齊,以任何可能的類型,所以我不要認爲這是一個問題。
我在做一些不應該在這裏工作的東西嗎?爲什麼會ptr2!= ptr1? 謝謝!
Array'new'會存儲一些額外的開銷(針對數組的大小),並且由於開銷的數量沒有指定,所以使用placement array new通常不是一個好主意。 – 2014-10-17 23:26:24
@ T.C。你確定 ?我不明白爲什麼它會被需要,因爲內存是由調用者管理的,再加上我沒有在實現文件中看到它 – lezebulon 2014-10-17 23:29:59
http://stackoverflow.com/questions/8720425/array-placement-new-requires -unspecified頂置式 - 的緩衝區。開銷部分由編譯器直接處理,而不是放置在新函數中。 – 2014-10-17 23:30:55