3 回答
TA贡献1788条经验 获得超4个赞
arr == addr
void * addr = std::malloc(N * sizeof(T));T * arr = ::new (addr) T[N]; // #1
::operator new[](???, addr)
???
N * sizeof(T)
addr
arr
addr
addr
您的示例调用 operator new[]()
,不是 operator new()
.分配函数 不构造什么都行。他(她,它)们 分配.
T * p = new T[10];
打电话给 operator new[]()
带尺寸参数 10 * sizeof(T) + x
,对默认构造函数的十个调用 T
,有效 ::new (p + i) T()
.
operator new[]
operator delete[]
最新情况:
T * p = ::new (buf1) T;T * arr = ::new (buf10) T[10];
::operator new(std::size_t, void*)
::operator new[](std::size_t, void*)
buf10
10 * sizeof(T) + y
y
.
TA贡献1776条经验 获得超12个赞
operator new[] ()
std::uninitialized_fill()
std::uninitialized_copy()
delete[] array
new
operator delete[] ()
new
- 3 回答
- 0 关注
- 322 浏览
添加回答
举报