C++の配置new
の構文に関する質問があります。次の2つのコードスニペットは機能的に同等であり、互換的に使用できます(最初のものが適切な場合は、2番目のコードを使用することを意味しているわけではありません)。配置の新しい振る舞いは
#1
T* myObj = new T();
// Do something with myObj
delete myObj;
#2
char* mem = new char[sizeof(T)];
T* myObj = new (mem) T();
// Do something with myObj
myObj->~T();
delete[] mem;
私はこのような配置新しい構文を使用していたとき、私は、特に注意しなければならないものがありますか?
'new char [sizeof(T)] 'によって割り当てられたメモリは適切に整列されますか? –
@ TadeuszKopec:標準では、メモリが最大限の位置合わせを保証しています。これは、プラグインを使用して型の整列を例えば最大値の2倍にバンプしてからすべてのベットをオフにすると、自然な整列(つまり、組み込み型で表示される)を使用する場合にのみ有効です。 –