Meaning of .clear() for containers

Steven Schveighoffer schveiguy at yahoo.com
Wed Jan 5 06:22:10 PST 2011


On Tue, 04 Jan 2011 17:56:51 -0500, Jesse Phillips  
<jessekphillips+D at gmail.com> wrote:

> Steven Schveighoffer Wrote:
>
>> On Tue, 04 Jan 2011 11:53:59 -0500, Jesse Phillips
>> <jessekphillips+D at gmail.com> wrote:
>>
>> > Answering a question over on stack overflow I realized that clear()  
>> has
>> > 2 meanings.
>> >
>> > TDPL says that clear should be used to free resources of the object  
>> and
>> > place the object into an invalid state. That is failure can occur but
>> > memory corruption is prevent, similar to null for pointer types.
>> >
>> > However for container types clear() is used to empty the container. It
>> > is still valid to use the container after calling clear(), but the
>> > definition from TDPL suggest that this can not be expected.
>>
>> clear as a global function is for destroying a class/struct
>>
>> clear as a member can do anything.  clear is not a keyword.
>>
>> clear(container) -> same as delete container, but without freeing any
>> memory.
>>
>> container.clear() -> remove all elements
>>
>> This has been brought up before as a problem, I'm not sure it's that
>> terrible, but I can see why there might be confusion.
>>
>> -Steve
>
> Then the answer I gave was wrong, and am curious what the correct answer  
> is:
>
> "Delete is not to be used with D version 2 and intended to be removed  
> from the language. What the hold up is, I am not sure. Instead you use a  
> function, I believe clear(), which resets your object to and empty state  
> (frees resources that isn't GC memory). This is explained in The D  
> Programming Language book, which I don't have handy right now."

That answer looks fine to me.

-Steve


More information about the Digitalmars-d mailing list