Program crash: GC destroys an object unexpectedly

eugene dee0xeed at gmail.com
Mon Sep 13 19:15:22 UTC 2021


On Monday, 13 September 2021 at 18:42:47 UTC, Steven 
Schveighoffer wrote:
> And you are registering your signals using the `+=` operator.

That was a sort of exercise with operator overloading.

> Now, with your stopper code that you showed, it looks like you 
> are storing the reference to stopper right on the main stack 
> frame. This *should* prevent those from being destroyed, since 
> Stopper has a reference to both signals.

Exactly - this is the main point of my confusion.
On my expectation, GC should not mark those as unreferenced.

Also, notice those dynamic arrays

     void main(string[] args) {
         RxSm[] rxMachines;
         auto rxPool = new RestRoom();
         foreach (k; 0 .. nConnections) {
             auto sm = new RxSm(rxPool);
             rxMachines ~= sm;
             sm.run();
         }

rxMachines (and alike) are not needed by the prog itself,
they are just to keep references for GC.




More information about the Digitalmars-d-learn mailing list