2013-07-26 10 views
9

アロケータは、 "placement new"と "operator new"と同じ作業をするようです。 とそのインタフェースがより便利です。例えば"placement new"と "operator new"はまだ必要ですか?

string *ps = static_cast<string *>(operator new(sizeof(string))); 
new (ps) string("Hello"); 
cout<<*ps<<endl; 

allocator<string> as; 
string *ps2 = as.allocate(1); 
as.construct(ps2,"Hello"); 
cout<<*ps2<<endl; 

に書き換えることができる。だからそれは "配置新しい" と "new演算子" 廃止されていることを意味していますか?

+0

下位互換性を保つためです。 –

+2

具体的には、 'allocator'は' new 'と 'operator new'の両方を必要とします。私は彼らが「時代遅れ」ではなく、むしろクライアントコードで使用すべきではないと言います。 –

+0

新しいプレースメントは、実際には組み込みシステムやオーズなどの独立した環境で使用できます。 – Skeen

答えて

5

これらはまだ必要です。どのようにカスタムアロケータを実装しますか? ;)

編集:この答えはより詳細な説明に値する

あなたはそれが配置new演算子を使用していることを見ることができるのstd ::アロケータのconstructメンバ関数を見てみてください。

したがって、アロケータの役割は、メンバ関数allocateを介してオブジェクトのために十分な大きさの初期化されていない記憶域を割り当て、次にその場所に「construct」メンバを介してこの記憶域に組み込みます。後者はプレースメントnewを使用して実行されます。

関連する問題