关于C++中Class的私有成员

1 c++ arrays private

我有一个关于C++中Class的私有成员的问题:

我有一个这样定义的类:

class Hello
{
   private:
      int a[2][2] = {{1,1},{2,2}};
   public:
      int* getA();
} hello;
Run Code Online (Sandbox Code Playgroud)

a是一个数组,它是类hello的私有成员,它被保护不被从类外部访问,但是如果我getA()用来返回数组的地址,就像这样:

int* Hello::getA()
{
   return &a[2][2];
}
Run Code Online (Sandbox Code Playgroud)

并且在类之外hello使用变量来保存这样的地址a[2][2]:

int* i = getA();
Run Code Online (Sandbox Code Playgroud)

确实i有地址a[2][2]?我们可以array像这样修改课外吗?a[2][2]仍然受到保护的private关键字?

NPE*_*NPE 10

会发生什么事情,你已经将指针返回到私人成员.一旦调用者具有该指针,他们就可以自由地修改指向的数组元素.没有保护,private不再相关.

此外,您无法控制调用者对该指针执行的操作,或者它们持有多长时间.如果有一些a不变量需要强制执行,则不能.如果a动态分配并且您需要重新分配它,则不能.

这是一个很好的证明,为什么泄漏指向私人成员通常不是一个好主意.

(这里,我假设您打算返回一个指向有效元素的指针; a[2][2]超出范围.)

如果我不想修改该值,只想读取数组的值,有更好的方法吗?

在这种情况下,要么通过值还是通过const引用返回元素(您也可以通过const指针返回它,但这会使调用者不必要地感到尴尬).