Passing and returning arguments by ref
Joe
jma at fc.com
Fri Mar 3 14:03:47 UTC 2023
Let's say we have two classes, A and B. The latter has a dynamic
array of X and type X has an add() method that can be used to
append elements (of type C, another struct) to X's own dynamic
array of C. So it's something like the following:
```d
struct C {}
struct X { C[] cs;
void add(C c) { cs ~= c; }
}
class A {
X x;
void mfd(ref B b) {
// manipulate A.x and one B.xs (returned by B.x1()
// by calling another member function
// that calls X.add(some C)
}
}
class B {
X[] xs;
this() { xs.length = 1; }
ref X x1() { return xs[0]; }
}
```
After A and B are instantiated and A.mfd() is called, the changes
to A.x are visible in main. However, although the changes to the
X returned by B.x1() are visible while A.mfd() executes, the
B.xs[0] is unchanged after it returns.
My understanding was that since A, B and X[] are all reference
types, this ought to work, but obviously something is missing.
More information about the Digitalmars-d-learn
mailing list