c++ - 如何在 C++ 中正确返回数组(类成员)?

标签 c++

我是 C++ 的新手,所以这可能是一个微不足道的问题:

我的类有一个私有(private)成员变量,它是一个数组。我需要返回该数组,但我不确定如何正确执行此操作。

class X {
    // ...
    private: double m_Array[9];
    public: double* GetArray() const { return m_Array; }
};

这段代码有什么问题吗?这会返回一个指向类成员的指针,对吗? - 所以如果我从此类的实例中获取该数组并修改它(从类外部),原始类成员数组也会被更改吗?如果是这种情况,我该如何返回数组的拷贝?

最佳答案

This returns a pointer to the class member, right?

几乎 - 它返回指向数组第一个元素的指针。

if I fetch that array from an instance of this class and modify it (from outside the class), the original class member array will get changed as well?

没错。

If that is the case, how do I return a copy of the array instead?

实现这一点的最简单方法是使用 std::arraystd::vector 代替。您应该返回对它的 const 引用 - 然后调用者避免在不需要时进行复制的成本。示例:

class X {
    std::array<double, 9> array;
public:
    std::array<double, 9> const & GetArray() const {return array;}
};

X x;
double d = x.GetArray()[5]; // read-only access, no copy

auto array = x.GetArray();  // get a copy
array[5] = 42;              // modify the copy

或者,如果数组具有固定大小(如您的示例中所示),您可以返回包含在结构中的数组 - 这就是 std::array 的含义。否则,您可以将指针(最好是智能指针,以避免内存泄漏)返回到新分配的数组 - 这或多或少是 std::vector 的意思。

关于c++ - 如何在 C++ 中正确返回数组(类成员)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087506/

相关文章:

C++:在同一架构层访问成员函数的建议

c++ - "Modern C++ Design"DocumentManager 设计是否正确?

c++ - 如何在派生类中调用运算符>>?

c++ - 带有模板的基于枚举的工厂无法转换类型

c++ - 无法使 wx-widget 与 netbeans 一起工作

c++ - 将一段文本读入字符串 vector

c++ - 为什么这个全局堆对象没有被释放?

c++ - 这是允许的 : memcpy(dest, src, 0)

c++ - 构造中的单个值与构造的参数列表

c++ - 在同一行上使用 malloc 创建两个数组