2013-11-24 3 views
2

это не работает:shared_ptr против unique_ptr с массивами

std::shared_ptr <char[]> ptr(new char[100]); 
ptr[10] = '\0'; 

и это работает:

std::unique_ptr <char[]> ptr(new char[100]); 
ptr[10] = '\0'; 

Я получаю compliler ошибка C2676, а это означает, что «не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора ". Любая идея, почему это так?

ответ

3

Так некоторые мысли:

  • std::shared_ptr<char[]> ptr(new char[100]); должна быть ошибка синтаксиса все само по себе.
  • По какой-то причине unique_ptr был включен для поддержки синтаксиса std::unique_ptr<char[]>. Некоторые из обоснований можно найти here.
  • std::shared_ptr<T>::operator[] call тоже не работает, т.к. std::shared_ptr не реализует его, только std::unique_ptr.
+0

благодарит за ответ. std :: shared_ptr ptr (новый символ [100]); работает с компилятором vs2013. – KJS

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