我正在开发一个类来处理配置文件,它由许多段组成,每个段都有许多键:值元素。我有以下代码(简化为基本问题):
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
,它当然会按预期触发析构函数。当 config
对象超出范围时,那些属于 segments[]
数组的部分不会被触发,我能理解为什么不,但是有没有办法让 cfgElement
析构函数触发这些?我无法删除
它们,因为它们不是指针。
我可以使 cfgSegment
的 head
元素成为一个指针,并循环遍历 config< 中的
构造函数,单独分配每个 segments[]
数组cfgElement
,但这是唯一的方法吗?
最佳答案
您只需要删除段而不是删除循环中的每个对象。
~config() {
delete[] segments;
}
关于C++ 如何触发类析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348902/