Рассмотрим этот код:unique_ptr указывает всегда на одной и той же области памяти
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. Как получить два массива разных областей памяти?
Как только get возвращает, p выходит из области действия и удаляет указатель. Вам нужно будет вернуть unique_ptr. –
BoBTFish
@BoBTFish: Хороший диагноз, плохое лечение. –
Есть ли причина, по которой вы не можете использовать 'std :: array' или' std :: vector'? Оба были бы проще, чем выкладывать себя с распределением памяти. – luke