Löschen habe ich eine generische Klasse, die etwa wie folgt aussieht:einen Vorlagentyp
template <class T>
class Example
{
private:
T data;
public:
Example(): data(T())
Example(T typeData): data(typeData)
~Example()
// ...
};
Ich bin ein wenig verwirrt darüber, wie eine Deconstructor für so etwas zu realisieren. Insbesondere, da T
von einem beliebigen Typ ist, könnte es Speicher zugeordnet auf dem Stapel sein (was immer der Fall für Example
ist, die über den Konstruktor ohne Argumente erstellt werden) oder auf dem Heap.
Zum Beispiel, wenn der Kunde macht den Typen für T
ein int*
und liefert einen Zeiger auf dynamische Speicher, wie kann ich wissen delete
auf data
zu nennen, im Gegensatz zu, wenn der Kunde den Typen int
eingestellt?
Nun, Sie können wie die Standard-Container sein und nicht das tun. Standard-Container-Destruktoren werden nichts an den Elementen vornehmen, wenn der Typ ein Zeigertyp ist. – NathanOliver
Hinweis: Verwenden Sie ein CRTP-Richtlinien-Typ-Idiom, das auf 'std :: is_pointer' basiert. Viel Spaß beim Aufbau, dann binde die ganze Sache, da es * wirklich * schwierig ist, Zeiger auf automatische Variablen von dynamischen am Verwendungsort zu unterscheiden. –
Bathsheba
Beide gültigen Punkte. Ich arbeite an etwas, was ich eher als Übung betrachten würde, also habe ich mich letztendlich gefragt, ob ich etwas verpasst habe, oder ob das nur eine schwierige Sache war, die allgemein zu funktionieren scheint (was der Fall zu sein scheint) – nmagerko