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