Meaning of .clear() for containers

Jesse Phillips jessekphillips+D at gmail.com
Tue Jan 4 14:56:51 PST 2011


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."

http://stackoverflow.com/questions/4589114/when-to-delete-in-d


More information about the Digitalmars-d mailing list