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

std::map<struct, int> Do I need destructor ?

本文关键字:析构函数 lt map struct std int gt      更新时间:2023-10-16

在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的析构函数应该对map C做什么?

不,您不需要为some_structclass X指定析构函数

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


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

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

只要不引入new操作符,就可以使用默认析构函数。

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

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

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;
}