Should I always call vector clear() at the end of the function?
c++, stdvector, stl, vector
Solution
If we look at the cppreference.com entry for std::vector::~vector it says:
Destructs the container. The destructors of the elements are called and the used storage is deallocated. Note, that if the elements are pointers, the pointed-to objects are not destroyed.
so no you don't have to call clear.
If we want to go to the draft standard, we have to look at section `23.2.1` General container requirements paragraph 4 which says:
In Tables 96 and 97, X denotes a container class containing objects of type T, a and b denote values of type X,[...]
and then look at `Table 96 — Container requirements` which has the following expression entry:
(&a)->~X()
and the following note:
note: the destructor is applied to every element of a; all the memory is deallocated.
Update
This is RAII in action and as Bjarne Stroustrup says in Why doesn't C++ provide a "finally" construct?:
Because C++ supports an alternative that is almost always better: The "resource acquisition is initialization" technique (TC++PL3 section 14.4). The basic idea is to represent a resource by a local object, so that the local object's destructor will release the resource. That way, the programmer cannot forget to release the resource.
Problem
I have some simple function that uses vector like this (pseudo code): ``` void someFunc(void) { std::vector<std::string> contentVector; // here are some operations on the vector // should I call the clear() here or this could be ommited ? contentVector.clear(); } ``` Should I call the clear() or this could be ommited ?