Scope & Structs

Nick Treleaven nick at geany.org
Sun Oct 13 09:28:22 UTC 2024


On Sunday, 13 October 2024 at 05:12:32 UTC, Salih Dincer wrote:
> Can we say that structs are in the stack (LIFO) as long as we 
> do not use the new operator?

Just to note that `new` does not give you a struct, it gives a 
struct pointer. Structs use the stack when declared inside a 
stack-allocated function frame. A struct B field inside another 
struct A will use A's storage. A could be allocated on the heap 
with `new`.

> Also, should using scope in structures cause a change? I never 
> seen it does!

With -dip1000 and @safe, `scope` is meaningful for a struct - it 
applies to the fields of a struct. However, it can be inferred 
too.

```d
@safe:

struct S
{
     int* i;
}

int* f()
{
     int i;
     scope s = S(&i); // OK (scope will be inferred if missing)
     return s.i; // error
}
```

> However, there is no incompatibility here: Whether it is a 
> class or a struct, when you use the new operator, the first run 
> constructor becomes the first run destructor with FIFO logic.

I don't think so for `new`:

"Important: The order in which the garbage collector calls 
destructors for unreferenced objects is not specified."

 From https://dlang.org/spec/class.html#destructors



More information about the Digitalmars-d-learn mailing list