C++ 如何触发类析构函数

标签 c++ class 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,它当然会按预期触发析构函数。当 config 对象超出范围时,那些属于 segments[] 数组的部分不会被触发,我能理解为什么不,但是有没有办法让 cfgElement 析构函数触发这些?我无法删除它们,因为它们不是指针。

我可以使 cfgSegmenthead 元素成为一个指针,并循环遍历 config< 中的 segments[] 数组 构造函数,单独分配每个 cfgElement,但这是唯一的方法吗?

最佳答案

您只需要删除段而不是删除循环中的每个对象。

   ~config() {
         delete[] segments;
   }

关于C++ 如何触发类析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348902/

相关文章:

未调用 C++ 析构函数,具体取决于链接顺序

php - 什么决定了类对象在 PHP 中何时被销毁?

c++ - 析构函数不能在 C++ 中为匿名对象工作?

c++ - 嵌套结构初始化

C++ 开发 GUI - 类?

c++ - 为什么这个私有(private)模板函数可以编译? -> 编译器错误 VS 2009

Javascript 类和自定义事件

python - 如何将实例对象保存到硬盘

c++ - 线程可以调用Class Function并访问类数据吗?

c++ - Qt Creator 从应用程序调用静态库时没有任何反应