On Monday, 25 April 2022 at 14:25:17 UTC, H. S. Teoh wrote:
On Mon, Apr 25, 2022 at 01:28:01PM +0000, Alain De Vos via Digitalmars-d-learn wrote:
Could thc or hboehm provide solutions ?

In general, GC (of any kind) does not (and cannot) guarantee the order objects will be collected in. So in the dtor, you cannot assume that any
objects you depend on still exist (they may have already been
collected).

There is also no guarantee that the object will *ever* get collected: in theory, the GC may only collect just enough to make space for further allocations, it's not obligated to collect *everything* that's collectible. Or the collection might not take place before the end of the program -- the GC may skip the final collection because it knows the OS will reclaim everything automatically anyway.

Basically, deterministic destruction and GC are antithetical to each other, and trying to have both is the road to trouble. If you wish to have deterministic destruction, don't use the GC; use RAII or reference counting instead.


T

When you can foresee a "maximum size" , you can create "deterministic" stack objects.

```
class C {
        @nogc this(){}
        @nogc this(int dummy){};
        @nogc int[3] fixarr=new int[3];
}//C

@nogc void myfun(){
        int a;
        scope c = new C();
        scope c2 = new C(5);
}//myfun

void main(){
        myfun();
}//main

```

It's just the variable length arrays which are "problematic". Feel free to elaborate.

Reply via email to