DIP 1021--Argument Ownership and Function Calls--Community Review Round 1
    Walter Bright 
    newshound2 at digitalmars.com
       
    Wed Jul 31 09:25:26 UTC 2019
    
    
  
On 7/19/2019 9:39 AM, Timon Gehr wrote:
> @safe:
> class C{
>      Array a;
>      this(Array a){ this.a=move(a); }
> }
> 
> void maybe_bad(C c, ref int i){
>      c.a = Array();
>      i++;
> }
> 
> void main(){
>      auto c=new C(Array());
>      c.a.append(5);
>      auto d=c;
>      maybe_bad(c,d.a.get());
> }
If Array was ref-counted, then it will be safe. The problem with ref-counted 
objects, as you pointed out years ago, is this:
     maybe_bad(c,c.a.get());
Copying c to d will increase the ref count and so it will be safe.
Without this DIP, ref-counted objects can't be safe. With it, they can.
    
    
More information about the Digitalmars-d
mailing list