malloc(s)[0..s] vs cast(T)malloc(s)

Paul Backus snarwin at gmail.com
Wed Oct 14 21:12:13 UTC 2020


On Wednesday, 14 October 2020 at 20:15:39 UTC, Jack wrote:
> What's the difference between:
>
>>import core.stdc.stdlib : malloc;
>>auto x = malloc(s)[0..s];
> and
>>auto x = cast(T)malloc(s);
> ?
>
> I have been using the last but I saw in some code examples, 
> like this[1] the first being used. What's the difference? in 
> the first one bounds checking is performed, giving an error 
> right away, right? whereas the cast would just turn the null 
> into the class reference and manual check need to be done 
> later. Is that the reason?
>
> [1]: 
> https://wiki.dlang.org/Memory_Management#Explicit_Class_Instance_Allocation

The difference is that the first version gives you a `void[]`, 
and the second version gives you a `T`. Neither version does any 
bounds checking.

Generally, you'd use the first version if you don't yet know what 
kind of object is going to be stored in the allocated memory (for 
example, if you're writing an allocator[1]), and the second 
version if you do know the type.

[1] 
https://dlang.org/phobos/std_experimental_allocator_building_blocks.html


More information about the Digitalmars-d-learn mailing list