我对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/