2016-10-21 3 views
2

Можно ли использовать оператор [] или ++ с уникальным указателем или shared_pointer? Как мы используем его для сырого указателяОператор с общим указателем [] и ++ ++

int * a = new int[10]; 
a[0] = 2; // We can use [] operator; 
  • Есть ли подобный путь для смарта-указателей?

  • Если это так, когда следует использовать это?

  • Если это не так, то почему?
  • Возможно ли использование многомерного массива?
+0

http://www.cplusplus.com/reference/memory/unique_ptr/ Сделайте то же самое для 'shared_ptr' – PcAF

+0

Вы можете использовать shared_pointer на массив:' std :: shared_ptr > ' – dkg

ответ

4

Оба std::unique_ptr и std::shared_ptr обеспечивают operator[] для индексированного доступа к сохраненному массиву. Вы можете использовать их, если они управляются массивом.

operator[] обеспечивает доступ к элементам массива, которым управляет unique_ptr.

например.

std::unique_ptr<int[]> a(new int[10]); 
a[0] = 2; // We can use [] operator; 

Примечание: индекс должен быть меньше количества элементов в массиве; в противном случае поведение не определено.

К сожалению, мы не можем использовать на них operator++; это не то, что предполагается делать smart pointers, они обычно используются для управления указателями.

И я предлагаю вам использовать std::vector или std::array, если вам нужен массив.

+0

Это указатель на int [] не на int, как у нас в случае необработанного указателя. Также можно использовать с ним опцию ++. – Anshuman

+0

@Anshuman Какой указатель вы имели в виду? Они обеспечивают такое же поведение, как и исходные указатели. Да, мы не можем напрямую использовать 'operator ++' на них; это не то, что нужно делать умным указателям. – songyuanyao

+0

Спасибо, А как насчет MultiDimensional Array – Anshuman

Смежные вопросы