Are D classes proper reference types?

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Fri Jun 25 17:34:48 UTC 2021


On Friday, 25 June 2021 at 07:17:20 UTC, kinke wrote:
> Wrt. manual non-heap allocations (stack/data segment/emplace 
> etc.), you could e.g. reserve the most significant bit of the 
> counter to denote such instances and prevent them from being 
> free'd (and possibly finalization/destruction too; this would 
> need some more thought I suppose).

Destruction is a bit tricky. If people rely on the destructor to 
run when the function returns then that cannot be moved to a 
reference counter. For instance if they have implemented some 
kind of locking mechanism or transaction mechanism with classes…

The most tricky one is emplace though as you have no way of 
releasing the memory without an extra function pointer.

Regarding using high bits in the counter; What you would want is 
to have a cheap increment/decrement and instead take the hit when 
the object is released. So you might actually instead want to 
keep track of the allcation-status in the lower 3 bits and 
instead do ±8, but I am not sure how that affects different CPUs. 
The basic idea, would be to make it so you don't trigger 
destruction on 0, but when the result is/becomes negative.




More information about the Digitalmars-d-learn mailing list