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