std :: map <struct,int =“”>我需要析构函数吗?

时间:2016-10-17 21:17:24

标签: c++ class destructor

你好,在cpp类X中我有一个

class X{
    private:
        std::map<some_struct, int> C;
}

其中some_struct定义为:

typedef struct{
    int a;
    int b;
    int c;
}some_struct;

我的问题是:我是否需要在X的析构函数中指定有关地图C的任何内容? 如果是,X的析构函数应该为地图C做什么动作?

3 个答案:

答案 0 :(得分:5)

不,您不需要为some_structclass X

指定析构函数

对于任何类型,它都由编译器自动生成。只要在使用newnew []的动态存储中没有明确分配类的任何内容,您就不需要编写应用deletedelete[]的析构函数。操作。

另外,对于编写c ++代码(vs c),您不需要使用typedef语法:

struct some_struct {
    int a;
    int b;
    int c;
};

答案 1 :(得分:2)

只要您不引入new运算符,就可以使用默认的析构函数。

所有 STL容器(map,vector,list,deque等等)不需要特殊的析构函数。它们是独立的,设计干净,一旦你超出范围就会自我毁灭。

答案 2 :(得分:0)

如果您使用C运算符在堆上动态分配了对象,则需要担心析构函数中的new,例如:

class X{
    public:
        X();
    private:
        std::map<some_struct, int> *p_C;
}

在定义中:

X::X() {
  p_C = new map<some_struct, int>();
}

X::~X() {
  if(p_C) delete p_C;
}