共享指针[]运算符和++运算符

时间:2016-10-21 06:44:32

标签: c++ arrays pointers smart-pointers

我们可以将[]运算符或++与唯一指针或shared_pointer一起使用吗?因为我们将它用于原始指针

int * a = new int[10];
a[0] = 2; // We can use [] operator;
  • 智能指针有类似的方法吗?

  • 如果它应该在什么时候我应该使用它?

  • 如果不存在那么为什么?
  • MultiDimensional Array也可以吗?

2 个答案:

答案 0 :(得分:4)

std::unique_ptrstd::shared_ptr都提供operator[]对存储数组的索引访问。如果他们管理的是阵列,您可以使用它们。

  

operator[]可以访问由unique_ptr管理的数组元素。

e.g。

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

注意索引应小于数组中元素的数量;否则,行为未定义。

很遗憾,我们无法直接使用operator++;这不是smart pointers应该做的事情,它们通常用于管理指针。

如果您只是想要一个数组,我建议您使用std::vectorstd::array

答案 1 :(得分:1)

这是一个例子 http://en.cppreference.com/w/cpp/memory/unique_ptr/operator_at

 std::unique_ptr<int[]> fact(new int[size]);