ho una classe generica che sembra qualcosa di simile:Eliminazione di un modello di tipo
template <class T>
class Example
{
private:
T data;
public:
Example(): data(T())
Example(T typeData): data(typeData)
~Example()
// ...
};
Sono un po 'confuso su come implementare un decostruttore per qualcosa di simile. In particolare, dal momento che T
è di qualsiasi tipo, potrebbe essere allocata memoria nello stack (che è sempre il caso per Example
creato tramite il costruttore senza argomenti) o sull'heap.
Per esempio, se il cliente fa il tipo per T
un int*
e fornisce un puntatore alla memoria dinamica, come faccio a sapere di chiamare delete
su data
in contrasto con se il client impostare il tipo di int
?
Beh, puoi essere come i contenitori standard e non farlo. I distruttori di container standard non faranno nulla agli elementi se il tipo è un tipo di puntatore. – NathanOliver
Suggerimento: utilizzare un idioma del tipo di politica CRTP basato su 'std :: is_pointer'. Divertiti a costruirlo, quindi bin tutto il tutto poiché è * veramente * difficile distinguere i puntatori dalle variabili automatiche da quelle dinamiche nel punto di utilizzo. –
Bathsheba
Entrambi i punti validi. Sto lavorando a quello che considererei più un esercizio, quindi alla fine mi stavo chiedendo se mi mancasse qualcosa o se questa fosse solo una cosa difficile da risolvere in generale (che sembra essere il caso) – nmagerko