operator new(n)与new unsigned char [n] for placement new

时间:2013-05-13 09:35:49

标签: c++ memory-management new-operator placement-new

我正在分配内存,以后将用于构建展示位置为new的对象。我应该使用operator new(n),还是应该使用new unsigned char[n]?为什么呢?

2 个答案:

答案 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)

前者返回指向某个存储区域的指针。后者返回一个指向数组第一个元素的指针,其中包含一些对象。如果您需要存储,请使用提供存储而不是对象的存储。