私は自分の学習のために新しい配置を練習していました。最初は、placement new はメモリを自動的に管理し、変数が重複しないと思っていましたが、そうではないと思います (私を修正してこれを強調してください)。以下のコードは、同じアドレス位置に新しい変数を割り当てているようです。
int arr[2] = {};
cout<<arr<<endl;
for(int i = 0; i<2;i++)
{
int *x = new(arr) int(i);
cout<<*x<<" "<<x<<endl;
}
以下のコードに修正すると問題が解決するようです(何か提案はありますか?それは正しいですか?)
int arr[2] = {};
cout<<arr<<endl;
for(int i = 0; i<2;i++)
{
int *x = new(arr+i) int(i);
cout<<*x<<" "<<x<<endl;
}
また、明確にする必要がある疑問があります。上記のプラクティスは適切ですか (ループ条件を変更するとコンテナーがオーバーフローする可能性があるためではない可能性があります)、または新しいコンテナーの配置は、一度に変数を割り当てるためにのみ使用する必要があります。
一度にではなく単一のコンテナーに変数を割り当て、境界リークもチェックする場合は、placement new を使用して変数を割り当てるより良い方法があります。