On Wed, Jul 10, 2013 at 08:38:40PM +0200, JohnnyK wrote: [...] > Reminds me of how Delphi (aka Pascal) strings are work. Thanks > everyone this answers some of my questions. Now what about when the > return type of a function is a string? Is D returning the pointer > to the string structure or is it returning the structure?
D structs are always passed by value, so it's the length+pointer pair that's being returned. There's no extra indirection involved here. What it points to stays where it is on the GC heap. So for example: int[] data = [1,2,3]; int[] f() { return data; } void main() { auto arr = f(); // returns copy of data's ptr+length arr.length--; // modifies this copy assert(arr == [1,2]); assert(data == [1,2,3]); // data itself hasn't changed } Does this help? T -- Be in denial for long enough, and one day you'll deny yourself of things you wish you hadn't.