On Thursday, 30 April 2020 at 16:55:36 UTC, Robert M. Münch wrote:
For ressource management I mostly use this pattern, to ensure
the destructor is run:
void myfunc(){
MyClass X = new MyClass(); scope(exit) X.destroy;
}
I somewhere read, this would work too:
void myfunc(){
auto MyClass X = new MyClass();
}
What does this "auto" does here? Wouldn't
void myfunc(){
auto X = new MyClass();
}
be sufficient? And would this construct guarantee that the
destructor is run? And if, why does "auto" has this effect,
while just using "new" doesn't guarantee to run the destructor?
I think you want to use scope rather than auto which will put the
class on the stack and call its destructor:
https://dlang.org/spec/attribute.html#scope