Является ли передача по ссылке закрытой переменной в классе напрямую изменяемой за пределами этого класса приемлемой практикой?Или это то, что компилятор «должен» подобрать и предотвратить?
Пример:
//-------------------------------------------
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
Мне нужно сделать что-то вроде этогоиспользование других / других объектов, приватных для класса владельца, но изменяемых другими при необходимости.Последнее, что я хочу, - это чтобы такая практика возвращалась и меня побеспокоила в будущем.
Что меня по-настоящему беспокоит, так это то, что я хотел бы рассматривать класс / структуру в основном как указатель на буфери адрес члена как смещения в этом буфере, так что даже если вы передадите значение-указатель члена, он будет бесполезен без базового указателя класса / структуры, к которой он принадлежит.Это то, что я инстинктивно чувствую, так и должно быть, так что приведенный выше пример даже не будет возможен.