8

後で Placement を使用してオブジェクトを構築するために使用されるメモリを割り当てていますnewoperator new(n)を使用する必要がありますか、または使用する必要がありnew unsigned char[n]ますか? なんで?

4

2 に答える 2

7

要因:

  • new[]delete[]/new()と一致する必要がありますdelete
  • 彼らはさまざまなことを伝えます。 operator new(n)は不特定の目的でのメモリの要求ですが、new unsigned char[n]大まかに言えばそこに文字を格納する意図を暗示しています。

配列形式は、パフォーマンス/効率がわずかに悪い場合があります-実装に応じて正確な詳細:

5.3.4/12 new T[5] は、演算子 new の呼び出しになります。ここで、x は、配列割り当てのオーバーヘッドを表す非負の未指定値です。new 式の結果は、によって返される値からこの量だけオフセットされoperator new[]ます。 ...

ところで - どちらも初期化されていません:

  • operator new()初期化されていないメモリに a を返しますvoid*: 3.7.4.1/2 を参照してください。 T はそのオブジェクトを次のように初期化します: new-initializer が省略された場合、オブジェクトはデフォルトで初期化されます (8.5)"; 8.5/6 は、クラス型のデフォルト コンストラクターのみが初期化を提供すると述べています。
于 2013-05-13T09:45:15.153 に答える
5

前者は、あるストレージ領域へのポインタを返します。後者は、いくつかのオブジェクトを含む配列の最初の要素へのポインターを返します。ストレージが必要な場合は、オブジェクトではなく、ストレージを提供するものを使用してください。

于 2013-05-13T09:38:44.563 に答える