Accessing memory after destroy

Johan Engelen via Digitalmars-d digitalmars-d at puremagic.com
Sat Jul 29 13:44:30 PDT 2017


I'd like to check a bit of info I need for Address Sanitizer 
checking.

The spec says [1]:
Use the destroy function to finalize an object by calling its 
destructor. The memory of the object is not immediately 
deallocated, instead the GC will collect the memory of the object 
at an undetermined point after finalization:
```
   class Foo { int x; this() { x = 1; } }
   Foo foo = new Foo;
   destroy(foo);
   assert(foo.x == int.init);  // object is still accessible
```

This tells me 2 things that I'd like to verify:
1. The destroyed memory is set to the type's `.init` value. (but 
the Ctor is not called)
2. It is _valid_ to access the memory after calling destroy.

Point 2 is worrying: what if there is a thread switch right after 
destroy, in which a GC collect happens?

Thanks,
   Johan

[1] https://dlang.org/spec/class.html#deallocators


More information about the Digitalmars-d mailing list