 <p>From the C++ standard:</p> <blockquote> <p><strong>3.8 Object lifetime</strong> </p> <p><sup>4</sup> A program may end the lifetime of any object by reusing the storage which the object occupies or by explicitly calling the destructor for an object of a class type with a non-trivial destructor. For an object of a class type with a non-trivial destructor, the program is not required to call the destructor explicitly before the storage which the object occupies is reused or released; however, if there is no explicit call to the destructor or if a delete-expression (5.3.5) is not used to release the storage, the destructor shall not be implicitly called and any program that depends on the side effects produced by the destructor has undefined behavior.</p> </blockquote> <p>It depends on whether the <code>std::vector</code> destructor is non-trivial and has side effects on which the program depends. Because it is a library class, it would be advisable to call the destructor to be safe. Else you would have to check the <code>std::vector</code> implementations now and in the future for all standard libraries you want your code to be compatible with.<br> If the vector class was your own, you would be in control of the destructor implementation and you could omit calling it if it was either trivial, or had no side-effects on which the program depends, as described above.<br> <sup>(But personally I would also call it in this case.)</sup></p>