Segfault when casting array of Interface types
rcor via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Sep 16 10:59:50 PDT 2014
On Tuesday, 16 September 2014 at 14:13:48 UTC, Marc Schütz wrote:
> On Tuesday, 16 September 2014 at 11:26:05 UTC, rcor wrote:
>>
>> 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.
>
> Yes, it is. (Probably. I don't have the time to test it now,
> but it's likely if my theory about the pointer adjustment is
> correct.)
I guess I could have checked that out myself:
import std.stdio;
import std.conv;
interface I {}
class C : I {}
class D : I {}
void main() {
C[] c = [new C, new C];
I[] i = cast(I[]) c;
I[] i2 = c.to!(I[]);
assert(c is cast(C[]) i); // i and c point to same address
assert(i !is i2); // to! appears to create a new
array
}
More information about the Digitalmars-d-learn
mailing list