On Friday, 13 November 2015 at 17:44:31 UTC, Ish wrote:
On Friday, 13 November 2015 at 16:06:51 UTC, Alex Parrill wrote:
On Friday, 13 November 2015 at 15:49:01 UTC, Ish wrote:

foreach (i; 0..5) {
  immutable int j = i;
  etc.
}
I want each j to be assigned separate memory so that it can be passed to a calle function and not overwritten by next value of i in foreach()??

Just like in C, you'll have to allocate storage for each object you create.

    immutable int* j = new immutable int(i);

Though if you use `new`, you can let the GC free them.

But if the data is immutable, then there's no point in allocating separate objects for each number, since they can't be changed.

immutable int* j = new immutable int(i);
gives error:
locks1.d:27: error: no constructor for immutable(int);

I need to allocate separate objects as the value is passed to a separate thread as: void incrementer(immutable int* nterm, shared(Lock) lock) { etc. }

This compiles for me with 2.068, 2.069 and latest Git (Linux x86_64):

void main() {
    foreach(i; 0 .. 10000) {
        immutable int* j = new immutable int(i);
    }
}

Can you post more of your actual code?

Reply via email to