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 ?

Original source

Related problems