你好,在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做什么动作?
答案 0 :(得分:5)
不,您不需要为some_struct
或class X
对于任何类型,它都由编译器自动生成。只要在使用new
或new []
的动态存储中没有明确分配类的任何内容,您就不需要编写应用delete
或delete[]
的析构函数。操作。
另外,对于编写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;
}