std :: array:通过智能指针

时间:2017-05-11 01:50:23

标签: c++ arrays c++11 pointers syntax

我正在将java程序翻译成C ++,并且该架构要求我在某些点返回空指针。 我有一个指针构造如下:

auto p= std::make_unique< std::array< A, 3>>();

其中A的形式为:

class A
    {
    public:
        double x = 0, y = 0;

        A(const double x, const double y):
            x(x), y(y)
        {}
    };

现在,我需要通过指针设置成员,所以我想:

p[0].x += 1.0;

由于unique_ptr具有解除引用的[]运算符,但失败了:

error: no match for 'operator[]' (operand types are 'std::unique_ptr<std::array<A, 3ull> >' and 'int')

我回顾了类似的问题,但我不清楚我想做什么是可能的。仅用于c样式声明的数组的[]运算符吗?

1 个答案:

答案 0 :(得分:2)

  

仅用于c样式声明的数组的[]运算符吗?

是的,它只支持阵列版本,即unique_ptr<T[]>std::array不计算在内。

您可以改为使用operator*,例如

(*p)[0].x += 1.0;