У меня есть двойной массив, выделенный указателем на указатель.Двойной (двумерный) массив с использованием std :: unique_ptr
// pointer to pointer
int **x = new int *[5]; // allocation
for (i=0; i<5; i++){
x[i] = new int[2];
}
for (i=0; i<5; i++){ // assignment
for (j=0; j<2; j++){
x[i][j] = i+j;
}
}
for (i=0; i<5; i++) // deallocation
delete x[i];
delete x;
Я пытаюсь сделать это с помощью unique_ptr
:
std::unique_ptr<std::unique_ptr<int>[]> a(new std::unique_ptr<int>[5]);
for (i=0; i<5; i++)
a[i] = new int[2];
но продолжал получать ошибку о том, что no operator = matches these operands
. Что я здесь делаю неправильно?
Спасибо за ваши данные. То, как я понимаю unique_ptr, заключается в том, что он гарантирует, что экземпляр, на который он указывает, имеет только 1 ссылку. Поэтому, используя unique_ptr, чтобы указать на unique_ptr для создания матрицы, должно быть хорошо использовать unique_ptr, учитывая, что не будет другой ссылки на экземпляр. Кроме того, я не понимаю причины последнего предложения. Благодарю. – Evan
любой класс RAII должен предложить ту же уникальную гарантию. Большинство классов C++ - это RAII. Поэтому вы должны использовать правильный инструмент для работы. вектор и массив должны быть предпочтительнее unique_ptr здесь. –
Причина для уникальных ptrs состоит в основном для размещения динамически выделенных отдельных объектов. Я не могу сразу вспомнить причину хранения массива в unique_ptr. –