On Thursday, 23 September 2021 at 17:16:23 UTC, Steven
Schveighoffer wrote:
On 9/23/21 12:58 PM, eugene wrote:
On Thursday, 23 September 2021 at 15:56:16 UTC, Steven
Schveighoffer wrote:
See more details:
https://docs.microsoft.com/en-us/dotnet/api/system.gc.keepalive?view=net-5.0#remarks
"
This method references the obj parameter, making that object
ineligible for garbage collection from the start of the
routine to the point, in execution order, where this method is
called. Code this method at the end, not the beginning, of the
range of instructions where obj must be available.
"
**Code this method at the end...**
:)
it is the same as proposed by jfondren simple
writeln(stopper.sg0.number) in the end of main, right?
Same effect, but writeln actually executes code to write data
to the console, whereas KeepAlive doesn't do anything.
```d
void keepAlive(Object o) {
}
void main(string[] args) {
import core.memory : GC;
auto Main = new Main();
Main.run();
auto stopper = new Stopper();
stopper.run();
writeln(" === Hello, world! === ");
auto md = new MessageDispatcher();
md.loop();
keepAlive(Main);
keepAlive(stopper);
writeln(" === Goodbye, world! === ");
}
```
works ok with dmd, stopper is not collected.