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

Meh*_*dad 8 c++ memory-management placement-new new-operator

我正在分配内存,稍后将用于构建具有放置的对象new.我应该使用operator new(n),还是应该使用new unsigned char[n]?为什么?

Ton*_*roy 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()将a返回void*到未初始化的内存:请参阅3.7.4.1/2"从分配函数返回时,对分配的存储的内容没有约束",而5.3.4/15则表示"创建类型对象的new-expression" T按如下方式初始化该对象:如果省略new-initializer,则对象默认初始化(8.5)"; 8.5/6表示只有类类型默认构造函数提供初始化.


R. *_*des 5

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