On Tuesday, 1 April 2025 at 17:08:27 UTC, Mike Parker wrote:
On Tuesday, 1 April 2025 at 16:54:50 UTC, Daniel Donnelly, Jr. wrote:
[...]

You've used `new`, which means it's allocated with the GC. In that case, your destructor is a finalizer and may or may not be called at any point during the program. It's non-deterministic.

If `Context` is a class, you can do this:

```
scope ctx = new Context;
```

This will allocate the class instance on the stack so the destructor will be called when the scope exits. And of course, if it's a struct, then just drop the new.

All of that said, D does have scope guards when you need them:

https://dlang.org/spec/statement.html#scope-guard-statement


Thank you, that makes sense!

Reply via email to