Come hai detto tu stesso correttamente, il vettore fa distruttori di chiamata per i suoi elementi. Quindi, nel tuo esempio, il vettore chiama "distruttori di puntatori" con. Tuttavia, è necessario tenere presente che i tipi di puntatore non hanno distruttori. Solo i tipi di classe possono avere distruttori. E i puntatori non sono classi. Quindi, è più corretto dire che std::vector
applica la sintassi di chiamata pseudo-distruttore agli oggetti puntatori memorizzati nel vettore. Per i tipi di puntatore che risultano in non-operazione, non fa nulla.
Questo risponde anche alla seconda parte della domanda: se gli oggetti myclass
puntati dai puntatori vengono distrutti. No, non vengono distrutti.
Inoltre, sembra che tu in qualche modo creda che "chiamare i distruttori sui puntatori" (la prima parte della tua domanda) è la stessa cosa di "distruggere gli oggetti appuntiti" (la seconda parte della tua domanda). In realtà si tratta di due cose non correlate completamente diverse.
Per creare un collegamento dal primo al secondo, ad es.per fare in modo che il vettore distrugga gli oggetti appuntiti, devi costruire il tuo vettore da una sorta di "puntatori intelligenti", in contrasto con i normali puntatori grezzi myclass *
. Il vettore chiamerà automaticamente i distruttori dei "puntatori intelligenti" e questi distruttori, a loro volta, distruggeranno gli oggetti appuntiti. Questo "link" può essere implementato solo esplicitamente, all'interno del distruttore del "puntatore intelligente", ed è per questo che i normali puntatori grezzi non possono aiutarti qui.
Check out [boost :: ptr_vector] (http://www.boost.org/doc/libs/1_49_0/libs/ptr_container/doc/ptr_vector.html) –