我对 C++ 还很陌生,所以这可能是一个微不足道的问题:
我的类有一个私有成员变量,它是一个数组。我需要返回该数组,但我不确定如何正确执行此操作。
class X {
// ...
private: double m_Array[9];
public: double* GetArray() const { return m_Array; }
};
这段代码有问题吗?这将返回一个指向类成员的指针,对吧? - 因此,如果我从此类的实例中获取该数组并修改它(从类外部),原始的类成员数组也会更改吗?如果是这种情况,我该如何返回数组的副本?
这将返回一个指向类成员的指针,对吧?
几乎 - 它返回一个指向数组第一个元素的指针。
如果我从此类的实例中获取该数组并修改它(从类外部),原始的类成员数组也会更改吗?
这是正确的。
如果是这种情况,我该如何返回数组的副本?
实现这一目标的最简单方法是使用std::array
or 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
或者,如果数组具有固定大小(如您的示例中所示),您可以返回包含在结构中的数组 - 这就是std::array
是。否则,您可以将指针(最好是智能指针,以避免内存泄漏)返回到新分配的数组 - 这或多或少是std::vector
is.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)