C++ 运算符new(n)与放置new的新无符号字符[n]
我正在分配内存,稍后将用于构建具有placementC++ 运算符new(n)与放置new的新无符号字符[n],c++,memory-management,new-operator,placement-new,C++,Memory Management,New Operator,Placement New,我正在分配内存,稍后将用于构建具有placementnew的对象。我应该使用运算符new(n),还是应该使用新的无符号字符[n]?为什么?前者返回指向某个存储区域的指针。后者返回一个指针,指向数组中包含某些对象的第一个元素。如果需要存储,请使用提供存储而不是对象的存储。因素: new[]必须与delete[]/new()匹配delete 他们交流不同的东西operator new(n)是用于未指定用途的内存请求,而new unsigned char[n]松散地表示要在其中存储字符 阵列形式的
new
的对象。我应该使用运算符new(n)
,还是应该使用新的无符号字符[n]
?为什么?前者返回指向某个存储区域的指针。后者返回一个指针,指向数组中包含某些对象的第一个元素。如果需要存储,请使用提供存储而不是对象的存储。因素:
必须与new[]
/delete[]
匹配new()
delete
- 他们交流不同的东西
是用于未指定用途的内存请求,而operator new(n)
松散地表示要在其中存储字符new unsigned char[n]
运算符new[]
返回的值中减去此值
顺便说一句,两者都没有初始化:
向未初始化内存返回一个operator new()
:请参见3.7.4.1/2“从分配函数返回时,对已分配存储的内容没有限制”,而5.3.4/15说“创建类型为T的对象的新表达式按如下方式初始化该对象:如果新的初始值设定项被初始化,则该对象为默认初始化(8.5)”;8.5/6表示只有类类型默认构造函数提供初始化void*
运算符new[n]
初始化newunsigned char[n]
default初始化一个unsigned char
数组(而unsigned char
的默认初始化不执行初始化)。@Elazar:也不初始化-我的答案中提供了标准参考。我很困惑,谁是Elazar?o_O@Mehrdad后来有人删除了他们的评论。