如何获得对私人成员的“读取权限”?

伊戈尔·波列塔耶夫

在以下情况下,在 C++ 中采取的最佳行动方案是什么?

我的班级有一些双指针作为私有成员:

class A
{
private:
    int** data;
    //...//
public:
    int** get_data () const { return data; };
    //...//
}

有时我想检查这个指针中的值并更改它们。并且有一些get_data用于此目的的get 函数

A* obj = new A();
//...//
int** data_from_A = obj->get_data();
// some manipulations with data_from_A pointer

但是,如果我想确信在进一步使用没有什么不会改变它呢?仅获得对data指针的“读取访问”如何更好

当然,我们可以将data指针公之于众,但在这种情况下,它可以从外部更改,这是不可接受的......

谢谢!

方位角

在 C++ 中,原始指针,尤其是指针算术,应该只在深埋在利用它们进行高性能计算的类中使用。

将诸如指向数组的指针之类的东西提供给外部的唯一原因是您使用了一些其他代码,这些代码重写起来会很乏味,例如由习惯于编写 C 风格代码的人编写的高度优化的求解器(实际上使用求解器可能在 C 中)。

如果没有,请使用标准库中的类,例如 std::vector(动态)、std::array(静态)或 std::list(链接)。

这会将您的代码转换为类似

private:
    vector<vector<int> > data;

public:
    const vector<vector<int> >& get_data() const { return data; }

就这么简单,一个const就足够了,子向量不再需要像原始数组那样。

另一种方法是去

const int& get_data(const size_t i, const size_t j) const { return data[i][j]; }

即使使用您当前的代码也可以使用。

对于vector,记住,如果你想使用一段时间,那么你必须用

const vector<vector<int> >& data = myClass.get_data();

而不是与其中任何一个

vector<vector<int> >& data = myClass.get_data(); //compile error
vector<vector<int> > data = myClass.get_data(); //works but unnecessarily copies the data

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章