In article <4b923fa1-75a4-45e0-b385-3674aecd0905@k30g2000hse.googlegroups.com>,
C C++ C++ <m.azmath@gmail.comwrote:
Quote:
>On Aug 28, 2:47*pm, Lambda <stephenh...@gmail.comwrote: Quote:
>On Aug 28, 9:37*pm, "C C++ C++" <m.azm...@gmail.comwrote:
>> Quote: |
On Aug 28, 2:24*pm, Lambda <stephenh...@gmail.comwrote:
| >> Quote:
For a std::vector, what's the difference between
the clear() function and its destructor?
| >> Quote:
I know their usages are different,
but how about their implementations?
| >> Quote:
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.
Quote:
>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