我对C++很陌生,所以这可能是一个微不足道的问题:
我的类有一个私有成员变量,它是一个数组.我需要返回该数组,但我不确定如何正确地执行此操作.
class X {
// ...
private: double m_Array[9];
public: double* GetArray() const { return m_Array; }
};
Run Code Online (Sandbox Code Playgroud)
这段代码有问题吗?这会返回一个指向类成员的指针,对吗? - 所以如果我从这个类的一个实例中获取该数组并修改它(从类外部),原始的类成员数组也会被更改?如果是这种情况,我该如何返回数组的副本?
Mik*_*our 11
这会返回一个指向类成员的指针,对吗?
几乎 - 它返回一个指向数组第一个元素的指针.
如果我从这个类的实例中获取该数组并修改它(从类外部),原始的类成员数组也将被更改?
那是对的.
如果是这种情况,我该如何返回数组的副本?
实现这一目标的最简单方法是使用std::array或std::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
Run Code Online (Sandbox Code Playgroud)
或者,如果数组具有固定大小(就像在您的示例中那样),则可以返回结构中包含的数组 - 这就是什么std::array.否则你可以返回一个指针(最好是一个智能指针,以避免内存泄漏)到一个新分配的数组 - 这或多或少是什么std::vector.