类中私有变量的引用传递是否在该类可接受的实践之外直接更改?或者这是编译器“应该”采取和防止的事情?
例子:
//-------------------------------------------
class Others
{
public:
Others() {};
void ChangeIt(string &str) { str = "Changed by Others"; }
};
//-------------------------------------------
class Locals
{
private:
string PrivateString;
public:
Locals() { PrivateString = "Set by Locals"; };
void VisitOthers() { Others o; o.ChangeIt(PrivateString); }
const string GetString() { return PrivateString; }
};
//-------------------------------------------
int main(void)
{
Locals lo;
cout << lo.GetString() << "\n";
lo.VisitOthers();
cout << lo.GetString() << "\n";
return 0;
}
输出:
Set by Locals
Changed by Others
我需要使用其他/不同的对象来做这样的事情,这些对象是所有者类私有的,但在需要时可以由其他人更改。我想要的最后一件事是让这种练习在未来回来并责备我。
本质上让我担心的是,我想将类/结构基本上视为指向缓冲区的指针,并将成员的地址视为该缓冲区的偏移量,这样即使您传递成员的指针值,它也会如果没有它所属的类/结构的基指针,它将毫无用处。这是我本能的感觉应该是这样的,所以上面的例子甚至不应该是可能的。