Segfault when casting array of Interface types
rcor via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Sep 16 04:26:03 PDT 2014
On Tuesday, 16 September 2014 at 08:49:04 UTC, Marc Schütz wrote:
> On Tuesday, 16 September 2014 at 08:39:43 UTC, Marc Schütz
> wrote:
>
> Whether the compiler should accept that or not is a different
> question. I guess it should, because if it doesn't, there
> wouldn't be an easy way to achieve a reinterpret cast (only via
> an intermediate cast to `void*`, which is clumsy).
>
> Anyway, using `std.conv.to` is the way to go here (if you don't
> require that last bit of performance), because it is safer in
> general (also checks for overflows and the like, for example).
Thanks, didn't think of trying std.conv.to. Can someone expand a
bit on what to! is doing in this situation that cast isn't? I
looked up 'reinterpret cast' but didn't see the connection to
this.
>
> AFAIK casting between interfaces and classes needs to adjust
> the underlying pointer. Therefore, when casting an array, the
> compiler would have to do that with the entire array, which
> cannot be copied without allocating memory (and mustn't be
> modified in-place for consistency reasons). This means that the
> cast is instead a pure reinterpret cast (repainting).
Is to! creating a new array of pointers while cast isn't? This
isn't a performance critical section and it's not a huge array,
so I ask mostly out of curiosity.
More information about the Digitalmars-d-learn
mailing list