2013-06-13 18 views
8

私は広範囲にallocateを使用するいくつかのコードに出くわしました。たとえば、何がmallocと割り当ての違い

char* recordDate = allocate<char>(20) 

私は以前に割り振りを使用していないので、mallocと割り当ての違いは何ですか?

私は、その利点についてはっきりしていませんが、mallocは生のメモリを与えています。割り当てが生のメモリを与えるように見えますが、ポインタを特定の型にキャストする必要はありません。 allocateドキュメントから

+2

正確に 'allocate'とは何ですか? – Mehrdad

+1

@Mehrdadこれはstdの一部です。 std :: allocator :: allocateを参照してください。http://en.cppreference.com/w/cpp/memory/allocator/allocate –

+3

@CoryKleinこれは 'allocate <>'ではなく、 'std :: allocator :: allocate'です私はそれをイメージングすることはできません。* "コードを広範囲に使用する" *常にアロケータ実装の一部です。特にこの 'recordData'の例です。 –

答えて

3

割り当てn * sizeof(T)::operator new(std::size_t)を呼び出すことによって初期化されていないストレージのバイトが、それはいつ、どのようにこの機能がと呼ばれる指定されていません。

また、this questionから、あなたは異なる結果にそのnewmallocリードを見ることができます。

+1

それでmallocとどう違うのですか? –

+1

これはどのドキュメントですか? 'std :: allocator :: allocate'の仕様を言い換えているようですが、これは質問にはありません。 –

0

概念的には、これらの2つの機能はまったく同じことを行います。あなたが "関数の内部を見て"始めるかメモリが足りなくなる(mallocはNULLを返します。allocate::newを呼び出すので、bad_alloc例外がスローされます)。

は、私はそれがだと思う「よりよいC++」(「を超えない他の理由のためにあなたがallocateをキャストする必要がない場合)allocateを使用する。

::new T[elements]を使用してC++での通常の方法だろう、と述べました、

+1

本当に、誰もが話している 'allocate'テンプレートは何ですか(回答者は与えられたように見えます)? –

3

allocateとの違いは、合計サイズではなく、必要なアイテムの数だけを指定する必要があるということです。これは、戻り値の型は自動的に正しい型にキャストされます。

C++ではほとんどどちらも使うべきではないが、適切なコンストラクタを呼び出すnewを好む。

関連する問題