On Monday, 8 October 2018 at 11:19:40 UTC, Per Nordlöw wrote:
I want to understand how calls to `new` for classes

see _d_newclass

and structs are lowered by the compiler and druntime to a GC-allocation (specifically how the `ba`-argument bits are determined) followed by an initialization using default constructor or via a user-defined constructor called using arguments to `new`. And how this is related to the trait `hasElaborateConstructor` for both `classes` and `structs`.

Memory is allocated, .init (for classes this comes from typeid(T).initializer)
 is copied over the memory and then the constructor is run.

I also want to understand how manually defined constructors and destructors affect the setting of the GC finalizer for a given aggregate type. And how this is related to the trait `hasElaborateDestructor` for both `classes` and `structs`

For classes the typeid(T).destructor is called on the class, for structs I'm not sure.

Where's the dmd and druntime code that handles these steps?

should be src/rt/lifetime.d IIRC

Reply via email to