我正在分配内存,以后将用于构建展示位置为new
的对象。我应该使用operator new(n)
,还是应该使用new unsigned char[n]
?为什么呢?
答案 0 :(得分:7)
因素:
new[]
必须与delete[]
/ new()
匹配delete
operator new(n)
是对未指定目的的内存请求,而new unsigned char[n]
松散地意味着在那里存储字符的意图。阵列形式可能略微性能/效率更低 - 具体细节取决于您的实施:
5.3.4 / 12新T [5]导致调用operator new,其中x是表示数组分配开销的非指定非指定值:new-expression的结果将从该值偏移该值由
返回operator new[]
....
顺便说一句 - 两者都没有初始化:
operator new()
将void*
返回到未初始化的内存:请参阅3.7.4.1/2“从分配函数返回时,对分配的存储的内容没有限制”,而5.3.4 / 15说“创建类型为T的对象的new-expression初始化该对象如下:如果省略new-initializer,则对象默认初始化(8.5)”; 8.5 / 6表示只有类类型默认构造函数提供初始化。答案 1 :(得分:5)
前者返回指向某个存储区域的指针。后者返回一个指向数组第一个元素的指针,其中包含一些对象。如果您需要存储,请使用提供存储而不是对象的存储。