このコードを考えてみましょう:
using namespace std;
int* get()
{
unique_ptr<int> p (new int[4]);
return p.get();
}
int main(int argc, char **argv)
{
int *arr1=get();
int* arr2=get();
for(int i=0;i<4;i++)
{
arr1[i]=i;
arr2[i]=i*2;
}
for(int i=0;i<4;i++)
cout << arr1[i];
return 0;
}
arr1とarr2は、同じメモリ領域を指します。したがって、それらは同じ値を共有します。arr2 = get()を呼び出すと、その理由がわかりません。
unique_ptr<int> p (new int[4]);
このオブジェクトを再度作成するべきではありませんか?arr1でまだ到達可能であるため、削除されません。異なるメモリ領域の2つの配列を取得するにはどうすればよいですか?