In article <4b**********************************@k30g2000hse. googlegroups.com>,
C C++ C++ <m.******@gmail.comwrote:
>On Aug 28, 2:47*pm, Lambda <stephenh...@gmail.comwrote:
>On Aug 28, 9:37*pm, "C C++ C++" <m.azm...@gmail.comwrote:
On Aug 28, 2:24*pm, Lambda <stephenh...@gmail.comwrote:
For a std::vector, what's the difference between
the clear() function and its destructor?
I know their usages are different,
but how about their implementations?
clear is to clear the data but not the memory allocation.
destructor clears everything.
Do you mean:
1. If the vector has 100 elements
2. clear()
3. Then the 100 memory spaces are not released, and
all the 100 elements are uninitialized?
Correct (although to be precise all the 100 elements are destructed)
The vector itself is not destructed and the memory used by the vector
is not released.
>It will release all 100 but keep the minimum memory space required for
vector.
No
Not sure what the standard says but my implementation does not release
any memory. I am pretty sure it is not required by the satandard to
release the memory. I don't know if it is allowed but I don't think I
have noticed an implementation that shrink the vector capacity. Each
elements of the vector will however be destructed correctly when
clear() is called.
Try a little example program such as:
#include <vector>
#include <iostream>
struct SomeType
{
SomeType()
{
std::cout << "SomeType constructor for " << this << std::endl;
};
~SomeType()
{
std::cout << "SomeType destructor for " << this << std::endl;
};
SomeType(SomeType const & )
{
std::cout << "SomeType copy constructor for " << this <<
std::endl;
};
};
int main()
{
std::vector<SomeTypetheVector(10);
std::cout << "Vector done\n";
std::cout << "Capacity " << theVector.capacity() << std::endl;
std::cout << "Size: " << theVector.size() << std::endl ;
std::cout << "Calling clear() \n";
theVector.clear();
std::cout << "Capacity " << theVector.capacity() << std::endl;
std::cout << "Size: " << theVector.size() << std::endl ;
return 0;
}
Yan