[Issue 24120] New: Closures break constructor/destructor safety
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Wed Aug 30 07:53:41 UTC 2023
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24120
          Issue ID: 24120
           Summary: Closures break constructor/destructor safety
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: default_357-line at yahoo.de
Consider this code:
@trusted:
extern(C) int printf(const char*, ...);
@safe:
struct S {
    int i;
    this(int i) { this.i = i; printf("  this(%i)\n", i); }
    ~this() { printf("  ~this(%i)\n", i); }
}
void delegate() @safe foo() {
    S s = S(5);
    return { printf("access s %i after destruction\n", s.i); };
}
void main() {
        foo()();
}
The closure in `foo` accesses `s` after the `s` destructor has run. This can be
an issue if `S` frees resources in the destructor.
--
    
    
More information about the Digitalmars-d-bugs
mailing list