c++的析构函数问题

C++ Problems with destructor

本文关键字:问题 析构函数 c++      更新时间:2023-10-16

我有一个问题,我不知道解决方法,需要你的帮助!提前感谢!

这里是我的类(类没有被完全复制)

#ifndef _CGRAPH_H_
#define _CGRAPH_H_

class Cgraph{
typedef std::list<int> vlist;
typedef std::map<int, int > vidmap;
typedef std::map<int, std::string > vutfmap;
typedef std::map<int, vlist > vmap;
typedef std::map<int, vlist >::iterator vmap_it;
int frequency;

private:
    vidmap vertices;
    vutfmap utf;
    vmap wattackedges; // label 0
    vmap battackedges; // label 1
    vmap defendedges_label2; 
    vmap defendedges_label3;
    vmap bdefendedges_label2; 
    vmap bdefendedges_label3;

    std::string eLine(int, int, int);
    std::string vLine(int, int);

public:

    Cgraph(){   
    };
    ~Cgraph(){ delete &vertices;
           delete &utf; delete &wattackedges; delete &battackedges;
           delete &defendedges_label2; delete &defendedges_label3;
           delete &bdefendedges_label2; delete &bdefendedges_label3;};

在主方法中,我按照

Cgraph *graph = new Cgraph();
delete graph;

然后我得到这个错误报告

*** Error in `./chess': double free or corruption (out): 0x00007ffffebb1340 ***
Aborted (core dumped)

您从未显式地动态分配new给这些成员,因此您不应该对它们进行delete。因为这些成员都有析构函数来处理清理,所以不需要析构函数。

map将在内部创建所需的内存,当调用map的析构函数时,也将调用map的析构函数并清除所有数据。

http://www.cplusplus.com/reference/map/map/地图/