В C ++ 11 я только что обнаружил, что, похоже, существуют различия между shared_ptr
и unique_ptr
, когда они используются для выделения массива. Я хотел бы получить подтверждение, если то, что я нашел, является правильным.
Я должен использовать <int []>
для unique_ptr
, но <int>
только для shared_ptr
:
unique_ptr<int []> myUniquePtr = unique_ptr<int[]> ( new int[100]);
shared_ptr<int> mySharedPtr = shared_ptr<int>( new int[100]);
Для unique_ptr
мне не нужно перегружать delete
functor / lambda func для указателя на массив:
unique_ptr<int []> myUniquePtr = unique_ptr<int[]> ( new int[100]); //should be good enough
но я буду за shared_ptr
:
shared_ptr< int> mySharedPtr = shared_ptr<int> ( new int [100], [](const int* p){delete [] p;});
Чтобы получить доступ к элементу в массиве через интеллектуальный указатель, с помощью unique_ptr
я могу использовать обычный способ [index]
, но с shared_ptr
я не могу сделать это:
myUniquePtr[10] = 100; // should be OK
но мне нужно
mySharedPtr.get()[10] = 100;
Не могли бы вы подтвердить правильность приведенных выше утверждений? Будет ли по-другому в C ++ 14?