[Insight-developers] bug: VectorContainer::Reserve() has incorrect
	semantics.
    Zachary Pincus 
    zpincus at stanford.edu
       
    Mon Jan 30 20:32:30 EST 2006
    
    
  
Hi again,
itk::VectorContainer::Reserve() states that it's purpose is to:
/**
  * Tell the container to allocate enough memory to allow at least
  * as many elements as the size given to be stored.  This is NOT
  * guaranteed to actually allocate any memory, but is useful if the
  * implementation of the container allocates contiguous storage.
  */
However, internally it calls itk::VectorContainer::CreateIndex(),  
which itself calls std::vector::resize(). Resize() is different than  
reserve() in that the former actually *creates empty elements*,  
changing the size (e.g. number of elements in) the container. Reserve  
is supposed to *allocate memory* for those elements without actually  
creating them (this is explicitly true for std::vector::reserve(),  
and is pretty strongly implied by the documentation above for  
itk::VectorContainer::Reserve().
So there's a semantic/documentaiton problem with  
itk::VectorContainer::Reserve() in that it's actually a Resize()  
method (which CreateIndex *also* is), and there is no true  
"std::vector::reserve"-style method.
So what to do about this? Fixing it changes the API; not fixing it  
leaves a dangerous mismatch between what Reserve() means to a  
VectorContainer and what reserve() means to a vector.
Zach
    
    
More information about the Insight-developers
mailing list