shared_ptr和unique_ptr在处理数组时的区别

4
这是不起作用的:

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

这个是有效的:

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

我收到了编译器错误C2676,意思是“未定义运算符或者没有到预定义运算符可接受的类型的转换方式”。你知道为什么会出现这种情况吗?

1个回答

3

以下是一些想法:

  • std::shared_ptr<char[]> ptr(new char[100]); 这句话本身就应该是语法错误。
  • 出于某种原因,unique_ptr 可以支持 std::unique_ptr<char[]> 语法。这个决定的部分理由可以在这里找到。
  • std::shared_ptr<T>::operator[] 不起作用,因为只有 std::unique_ptr 实现了它。

感谢您的回复。std::shared_ptr<char[]> ptr(new char[100]); 可以在 VS2013 编译器中正常工作。 - KJS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接