我对C++中Class的私有(private)成员有疑问:

我有一个这样定义的类:

class Hello
{
   private:
      int a[2][2] = {{1,1},{2,2}};
   public:
      int* getA();
} hello;
a是一个数组,它是类hello的私有(private)成员,它可以防止从类外部访问,但如果我使用getA()返回数组的地址,如下所示:
int* Hello::getA()
{
   return &a[2][2];
}

在类hello之外,使用变量来保留a[2][2]的地址,如下所示:
int* i = getA();
i是否具有a[2][2]的地址?我们可以像这样在类之外修改array吗? a[2][2]仍受private关键字保护吗?

最佳答案

发生的情况是您已将指针返回到私有(private)成员。一旦调用者有了该指针,他们就可以自由地修改指向数组的元素。没有保护,并且private不再相关。

此外,您无法控制调用者对该指针执行的操作或它们保持该指针的时间。如果需要强制执行某些a不变量,则可以不这样做。如果a是动态分配的,而您需要重新分配它,则不能。

这很好地说明了为什么将指针泄漏到私有(private)成员中通常不是一个好主意。

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



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

关于c++ - 关于C++中Class的私有(private)成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13690917/

10-13 06:16
查看更多