Como usted ha dicho correctamente a sí mismo, vector hace destructores de llamadas de sus elementos. Entonces, en su ejemplo, el vector hace llamada "destructores de punteros". Sin embargo, debe tener en cuenta que los tipos de punteros no tienen destructores. Solo los tipos de clases pueden tener destructores. Y los punteros no son clases. Por lo tanto, es más correcto decir que std::vector
aplica la sintaxis de llamada pseudo-destructor a los objetos de puntero almacenados en el vector. Para los tipos de puntero que dan como resultado no-operación, es decir, no hace nada.
Esto también responde a la segunda parte de su pregunta: si se destruyen los objetos myclass
apuntados por los punteros. No, ellos no son destruidos.
Además, parece que de alguna manera cree que "llamar destructores en punteros" (la primera parte de su pregunta) es lo mismo que "destruir los objetos puntiagudos" (la segunda parte de su pregunta). En realidad, estas son dos cosas completamente diferentes que no están relacionadas.
Para crear un enlace de la primera a la última, es decirpara hacer que el vector destruya los objetos puntiagudos, debe construir su vector a partir de algún tipo de "punteros inteligentes", a diferencia de los punteros ordinarios sin procesar myclass *
. El vector llamará automáticamente a los destructores de los "punteros inteligentes" y estos destructores, a su vez, destruirán los objetos puntiagudos. Este "enlace" solo puede implementarse explícitamente, dentro del destructor "puntero inteligente", por lo que los punteros crudos ordinarios no pueden ayudarlo aquí.
Revisa [boost :: ptr_vector] (http://www.boost.org/doc/libs/1_49_0/libs/ptr_container/doc/ptr_vector.html) –