std.container.RedBlackTree versus C++ std::set

monarch_dodra monarchdodra at gmail.com
Thu Feb 14 04:27:30 PST 2013


On Thursday, 14 February 2013 at 10:58:19 UTC, Namespace wrote:
>> struct S
>> {
>>    static struct Payload
>>    {
>>        //Tons of data here
>>    }
>>    Payload* _p;
>>
>>    //fonctions
>> }
>>
>> Ref counted is implemented that way. most of the containers 
>> are also implemented that way. associative arrays are also 
>> implemented that way under the hood.
>
> But you have to allocate '_p' again on the heap.

Well, yeah, that's the point. I'm not saying it's a best fit for 
everything. You are basically trading construction costs for copy 
costs.

> I see no advantage over classes, except that these structures 
> are just not null by default.

Actually, (and IMO, this is a very big problem), these structures 
are *always* null by default. There is no easy way to "default 
initialize" structs in D :(

> Is that the advantage?

The advantage is deterministic RAII. With classes you only get 
non-deterministic RAII.

For example: File. File will close the underlying FILE* when the 
last File is destroyed. But no later.


More information about the Digitalmars-d-learn mailing list