On Wednesday, November 29, 2017 21:12:58 Steven Schveighoffer via Digitalmars-d-learn wrote: > On 11/29/17 7:40 PM, David Colson wrote: > > Hello all! > > > > I'm getting settled into D and I came into a problem. A code sample > > shows it best: > > > > class SomeType > > { > > > > string text; > > this(string input) {text = input;} > > > > } > > > > > > void main() > > { > > > > SomeType foo = new SomeType("Hello"); > > > > SomeType bar = foo; > > > > foo = new SomeType("World"); > > > > writeln(bar.text); // Prints hello > > // I'd like it to print World > > > > } > > > > In the C++ world I could do this using pointers and changing the data > > underneath a given pointer, but I can't use pointers in D, so I'm not > > sure how I can get this behaviour? > > > > I'd be open to other ways of achieving the same affect in D, using more > > D like methods. > > D does not support reassigning class data using assignment operator, > only the class reference. You can change the fields individually if you > need to. > > e.g.: > > foo.text = "World"; > > structs are value types in D and will behave similar to C++ > classes/structs.
With classes, you could also assign the entire state of the object similar to what you'd get with structs and opAssign, but you'd have to write a member function to do it. There's no reason that you couldn't do the equivalent of opAssign. It's just that there's no built-in operator for it. So, whatever member function you wrote for it would be non-standard. Heck, technically, we don't even have a standard way to clone a class object like C# or Java do. Some folks write a clone function and others write a dup function; either way, there's nothing built-in or standard for it. - Jonathan M Davis