How do I call a context objects destructor or some type of exit() function automatically upon exiting a with {} scope?
Mike Parker
aldacron at gmail.com
Tue Apr 1 17:08:27 UTC 2025
On Tuesday, 1 April 2025 at 16:54:50 UTC, Daniel Donnelly, Jr.
wrote:
> I thought the destructor might automatically be called after
> with (new Context()) {} but it's not. Is there some sort of
> entry/exit functions like in Python?
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
More information about the Digitalmars-d-learn
mailing list