Question: I encounter many times with code where std::vector::clear() of class member of type std::vector is called in constructor and destructor. 

I don't see why it's required:

1. **constructor** - the class member of type std::vector is empty by default, so no need to call clear().
2. **destructor** - the class member of type std::vector will be destroyed as part of standard destruction of object contnaining it. As part of vector destruction all **value objects** containied in it will be destroyed (if it heap allocated pointers to memory, they should be deleted "manually"), so again no need to call clear().

Do I miss something?

Answer: 
From the sound of things, the people who wrote that code were the ones who missed something. The only time it would make sense to call clear() in a ctor or dtor would be in the middle of some other code. For example, a ctor might read in some data, process it, then read in more data. In such a case, it's probably faster to use a single container for the data as you read it in, and clear it each time, than to create a new container every iteration.
**Of course one has to call clear() or resize(0) or the equivalent say (std::\_Destroy\_range(...) in the destructor before deallocating.**

Deallocation is done via allocator::deallocate **which does NOT run any destructors**. It just frees the memory.

clear() is equivalent to resize(0) which runs destructors on the first size() things in the allocated buffer

NOT just allocated pointers, file handles, held mutexes, all other recoverable resources held by the object. The destructors MUST be run. Before instantiation the template doesn't know that the destructor is trivial. If the destructor is trivial, THEN its gets optimized out AFTER instantiation