Я разрабатываю класс для обработки файлов конфигурации, состоящих из нескольких сегментов, каждый сегмент с несколькими элементами: значение. У меня есть следующий код (урезано до только основной вопрос):C++ Как уничтожить класс Destructor
class cfgElement {
public:
char *key;
char *val;
cfgElement *link;
cfgElement() {
key = nullptr;
val = nullptr;
link = nullptr;
}
~cfgElement() {
if (key != nullptr) delete key;
if (val != nullptr) delete val;
key = nullptr;
val = nullptr;
link = nullptr;
}
};
struct cfgSegment {
char Name[16];
cfgElement head;
};
class config {
private:
cfgSegment *segments;
public:
config() {
segments = new cfgSegment[5];
}
~config() {
for (int i=0; i<5; i++) {
// Clean up segments[i].head
}
}
};
Если я объявляю cfgElement
в основном коде, это, конечно, вызывает деструктор, как и ожидалось. Те, которые являются частью массива segments[]
, не запускаются, когда объект config
выходит за пределы области видимости, и я могу понять, почему нет, но есть ли способ получить деструктор для запуска для них? Я не могу delete
их, так как они не указатели.
Я мог бы сделать head
элемент cfgSegment
указатель, и цикл над segments[]
массива в config
конструктора, выделяя каждый cfgElement
по отдельности, но в том, что единственный способ сделать это?
does 'delete [] segment;' work? Внутри '~ config()' без цикла for. –
Пожалуйста, научитесь использовать std :: string вместо char * и умные указатели (u.e.std :: unique_ptr) instad «raw» указателя, ваша жизнь будет проще. – roalz
@roalz Да, я понимаю, что строки и умные указатели проще в использовании, но по мере того, как я учусь, я хочу сделать что-то трудное, чтобы понять эти проблемы. – alanlittle