shared_ptr vs unique_ptr with arrays

时间:2013-11-24 17:36:02

标签: c++ pointers c++11 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,意思是“没有定义此运算符或转换为预定义运算符可接受的类型”。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

所以有些想法:

  • std::shared_ptr<char[]> ptr(new char[100]);本身应该是语法错误。
  • 无论出于何种原因,unique_ptr已启用以支持std::unique_ptr<char[]>语法。可以找到一些基本原理here
  • std::shared_ptr<T>::operator[]调用也不起作用,因为std::shared_ptr没有实现,只有std::unique_ptr