@safe leak fix?

Frank Benoit keinfarbton at googlemail.com
Wed Nov 11 15:59:16 PST 2009


Walter Bright schrieb:
> Consider the code:
> 
>   @safe:
>     T[] foo(T[] a) { return a; }
> 
>     T[] bar()
>     {
>         T[10] x;
>         return foo(x);
>     }
> 

If D would have something like a slice-info which could be returned
instead of the slice itself, then foo would be safe.

slice-info would be something like a struct/Tuple storing the start and
end index.

That applied onto the original array gives the slice.

SliceInfo foo( T[] a){
  // do something, resulting in e.g. a[2..6]
  return SliceInfo(2, 6);
}

T[] bar(){
	T[] x = new T[10];
	return x[foo(x)]; // safe compile OK
}

T[] bar(){
	T[10] x;
	return x[foo(x)]; // safe error, because x slice escapes
}

This shifts responsibility of memory safety to the caller with little
extra effort.



More information about the Digitalmars-d mailing list